/** * Method for testing the class from command line. * * @param args The supplied command line arguments. */ public static void main(String[] args) { if (args.length != 1) { System.err.println("Usage: CoverTree <ARFF file>"); System.exit(-1); } try { Instances insts = null; if (args[0].endsWith(".csv")) { CSVLoader csv = new CSVLoader(); csv.setFile(new File(args[0])); insts = csv.getDataSet(); } else { insts = new Instances(new BufferedReader(new FileReader(args[0]))); } CoverTree tree = new CoverTree(); tree.setInstances(insts); print("Created data tree:\n"); print(0, tree.m_Root); println(""); } catch (Exception ex) { ex.printStackTrace(); } } }
if (compare(mid, start, cover_set) < 0.0) { SWAP(mid, start, cover_set); if (compare(hi, mid, cover_set) < 0.0) { SWAP(mid, hi, cover_set); } else { jumpover = true; if (!jumpover && compare(mid, start, cover_set) < 0.0) { SWAP(mid, start, cover_set); while (compare(left, mid, cover_set) < 0.0) { left++; while (compare(mid, right, cover_set) < 0.0) { right--; SWAP(left, right, cover_set); if (mid == left) { mid = right;
/** * Builds the Cover Tree on the given set of instances. * * @param instances The insts on which the Cover Tree is to be built. * @throws Exception If some error occurs while building the Cover Tree */ @Override public void setInstances(Instances instances) throws Exception { super.setInstances(instances); buildCoverTree(instances); }
if (current_scale > max_scale) { // All remaining points are in the zero brute_nearest(k, query_node, zero_set, upper_k, results); } else { setter(new_upper_k, upper_k.peek().distance + query_chi.parent_dist, k); copy_zero_set(query_chi, new_upper_k, zero_set, new_zero_set); copy_cover_sets(query_chi, new_upper_k, cover_sets, new_cover_sets, current_scale, max_scale); internal_batch_nearest_neighbor(k, query_chi, new_cover_sets, new_zero_set, current_scale, max_scale, new_upper_k, results); internal_batch_nearest_neighbor(k, query_node.children.element(0), cover_sets, zero_set, current_scale, max_scale, upper_k, results); } else { // reduce cover set scale -- amk14comment: if j<i in paper Stack<d_node> cover_set_i = getCoverSet(current_scale, cover_sets); halfsort(cover_set_i); max_scale = descend(query_node, upper_k, current_scale, max_scale, cover_sets, zero_set); cover_set_i.clear(); current_scale++; internal_batch_nearest_neighbor(k, query_node, cover_sets, zero_set, current_scale, max_scale, upper_k, results);
CoverTreeNode leaf = new_leaf(p); double max_dist = max_set(point_set); // O(|point_set|) the max dist int next_scale = Math.min(max_scale - 1, get_scale(max_dist)); if (next_scale == Integer.MIN_VALUE) { // We have points with distance CoverTreeNode leaf = new_leaf(p); children.push(leaf); m_NumLeaves++; leaf = new_leaf(tmpnode.idx); children.push(leaf); m_NumLeaves++; CoverTreeNode n = new_node(p); // make a new node out of p and assign } else { Stack<DistanceNode> far = new Stack<DistanceNode>(); split(point_set, far, max_scale); // O(|point_set|) CoverTreeNode child = batch_insert(p, next_scale, top_scale, point_set, consumed_set); CoverTreeNode n = new_node(p); dist_split(point_set, new_point_set, tmpnode, max_scale); // O(|point_saet|) dist_split(far, new_point_set, tmpnode, max_scale); // O(|far|)
m_Stats.searchStart(); CoverTree querytree = new CoverTree(); Instances insts = new Instances(m_Instances, 0); insts.add(target); querytree.setInstances(insts); Stack<NeighborList> result = new Stack<NeighborList>(); batch_nearest_neighbor(k, this.m_Root, querytree.m_Root, result); if (m_Stats != null) { m_Stats.searchFinish();
"CoverTree: Empty set of instances. Cannot build tree."); checkMissing(insts); if (m_EuclideanDistance == null) { m_DistanceFunction = m_EuclideanDistance = new EuclideanDistance(insts); max_dist = max_set(point_set); m_Root = batch_insert(p_idx, get_scale(max_dist), get_scale(max_dist), point_set, consumed_set);
Stack<d_node> new_zero_set = new Stack<d_node>(); CoverTreeNode query_chi = query.children.element(0); brute_nearest(k, query_chi, zero_set, upper_k, results); MyHeap new_upper_k = new MyHeap(k); setter(new_upper_k, upper_k.peek().distance + query_chi.parent_dist, k); copy_zero_set(query_chi, new_upper_k, zero_set, new_zero_set); brute_nearest(k, query_chi, new_zero_set, new_upper_k, results);
/** Creates a default CoverTree */ public NearestNeighbourSearch getNearestNeighbourSearch() { return new CoverTree(); }
if (current_scale > max_scale) { // All remaining points are in the zero brute_nearest(k, query_node, zero_set, upper_k, results); } else { setter(new_upper_k, upper_k.peek().distance + query_chi.parent_dist, k); copy_zero_set(query_chi, new_upper_k, zero_set, new_zero_set); copy_cover_sets(query_chi, new_upper_k, cover_sets, new_cover_sets, current_scale, max_scale); internal_batch_nearest_neighbor(k, query_chi, new_cover_sets, new_zero_set, current_scale, max_scale, new_upper_k, results); internal_batch_nearest_neighbor(k, query_node.children.element(0), cover_sets, zero_set, current_scale, max_scale, upper_k, results); } else { // reduce cover set scale -- amk14comment: if j<i in paper Stack<d_node> cover_set_i = getCoverSet(current_scale, cover_sets); halfsort(cover_set_i); max_scale = descend(query_node, upper_k, current_scale, max_scale, cover_sets, zero_set); cover_set_i.clear(); current_scale++; internal_batch_nearest_neighbor(k, query_node, cover_sets, zero_set, current_scale, max_scale, upper_k, results);
CoverTreeNode leaf = new_leaf(p); double max_dist = max_set(point_set); // O(|point_set|) the max dist int next_scale = Math.min(max_scale - 1, get_scale(max_dist)); if (next_scale == Integer.MIN_VALUE) { // We have points with distance CoverTreeNode leaf = new_leaf(p); children.push(leaf); m_NumLeaves++; leaf = new_leaf(tmpnode.idx); children.push(leaf); m_NumLeaves++; CoverTreeNode n = new_node(p); // make a new node out of p and assign } else { Stack<DistanceNode> far = new Stack<DistanceNode>(); split(point_set, far, max_scale); // O(|point_set|) CoverTreeNode child = batch_insert(p, next_scale, top_scale, point_set, consumed_set); CoverTreeNode n = new_node(p); dist_split(point_set, new_point_set, tmpnode, max_scale); // O(|point_saet|) dist_split(far, new_point_set, tmpnode, max_scale); // O(|far|)
m_Stats.searchStart(); CoverTree querytree = new CoverTree(); Instances insts = new Instances(m_Instances, 0); insts.add(target); querytree.setInstances(insts); Stack<NeighborList> result = new Stack<NeighborList>(); batch_nearest_neighbor(k, this.m_Root, querytree.m_Root, result); if (m_Stats != null) { m_Stats.searchFinish();
"CoverTree: Empty set of instances. Cannot build tree."); checkMissing(insts); if (m_EuclideanDistance == null) { m_DistanceFunction = m_EuclideanDistance = new EuclideanDistance(insts); max_dist = max_set(point_set); m_Root = batch_insert(p_idx, get_scale(max_dist), get_scale(max_dist), point_set, consumed_set);
Stack<d_node> new_zero_set = new Stack<d_node>(); CoverTreeNode query_chi = query.children.element(0); brute_nearest(k, query_chi, zero_set, upper_k, results); MyHeap new_upper_k = new MyHeap(k); setter(new_upper_k, upper_k.peek().distance + query_chi.parent_dist, k); copy_zero_set(query_chi, new_upper_k, zero_set, new_zero_set); brute_nearest(k, query_chi, new_zero_set, new_upper_k, results);
/** Creates a default CoverTree */ public NearestNeighbourSearch getNearestNeighbourSearch() { return new CoverTree(); }
/** * Method for testing the class from command line. * * @param args The supplied command line arguments. */ public static void main(String[] args) { if (args.length != 1) { System.err.println("Usage: CoverTree <ARFF file>"); System.exit(-1); } try { Instances insts = null; if (args[0].endsWith(".csv")) { CSVLoader csv = new CSVLoader(); csv.setFile(new File(args[0])); insts = csv.getDataSet(); } else { insts = new Instances(new BufferedReader(new FileReader(args[0]))); } CoverTree tree = new CoverTree(); tree.setInstances(insts); print("Created data tree:\n"); print(0, tree.m_Root); println(""); } catch (Exception ex) { ex.printStackTrace(); } } }
if (compare(mid, start, cover_set) < 0.0) { SWAP(mid, start, cover_set); if (compare(hi, mid, cover_set) < 0.0) { SWAP(mid, hi, cover_set); } else { jumpover = true; if (!jumpover && compare(mid, start, cover_set) < 0.0) { SWAP(mid, start, cover_set); while (compare(left, mid, cover_set) < 0.0) { left++; while (compare(mid, right, cover_set) < 0.0) { right--; SWAP(left, right, cover_set); if (mid == left) { mid = right;
/** * Builds the Cover Tree on the given set of instances. * * @param instances The insts on which the Cover Tree is to be built. * @throws Exception If some error occurs while building the Cover Tree */ @Override public void setInstances(Instances instances) throws Exception { super.setInstances(instances); buildCoverTree(instances); }