void split(int attIndex, double split, Dataset left, Dataset right) {
			int[] leftHash = new int[instances.size()];
			int[] rightHash = new int[instances.size()];
			Arrays.fill(leftHash, -1);
			Arrays.fill(rightHash, -1);
			for (int i = 0; i < instances.size(); i++) {
				Instance instance = instances.get(i);
				if (instance.getValue(attIndex) <= split) {
					left.instances.add(instance);
					leftHash[i] = left.instances.size() - 1;
				} else {
					right.instances.add(instance);
					rightHash[i] = right.instances.size() - 1;
				}
			}

			for (int i = 0; i < sortedLists.size(); i++) {
				left.sortedLists.add(new ArrayList<IntDoublePair>(left.instances.size()));
				right.sortedLists.add(new ArrayList<IntDoublePair>(right.instances.size()));

				List<IntDoublePair> sortedList = sortedLists.get(i);
				for (IntDoublePair pair : sortedList) {
					int leftIdx = leftHash[pair.v1];
					int rightIdx = rightHash[pair.v1];
					if (leftIdx != -1) {
						pair.v1 = leftIdx;
						left.sortedLists.get(i).add(pair);
					}
					if (rightIdx != -1) {
						pair.v1 = rightIdx;
						right.sortedLists.get(i).add(pair);
					}
				}
			}
		}