From 3495c417cde5fc6632f25ef7b0369037ae09da48 Mon Sep 17 00:00:00 2001 From: Stefano Mazzocchi Date: Sun, 14 Mar 2010 01:29:27 +0000 Subject: [PATCH] more fixes to the VPTree, this time it's working consistently for real git-svn-id: http://google-refine.googlecode.com/svn/trunk@293 7d457c2a-affb-35e4-300a-418c747d4874 --- .../mit/simile/vicino/vptree/VPTreeBuilder.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/mit/simile/vicino/vptree/VPTreeBuilder.java b/src/main/java/edu/mit/simile/vicino/vptree/VPTreeBuilder.java index 6c23819cb..4d02bb2cf 100755 --- a/src/main/java/edu/mit/simile/vicino/vptree/VPTreeBuilder.java +++ b/src/main/java/edu/mit/simile/vicino/vptree/VPTreeBuilder.java @@ -80,12 +80,14 @@ public class VPTreeBuilder { return null; } - TNode vpNode = new TNode(nodes[begin + getRandomIndex(delta)].get()); + Node randomNode = nodes[begin + getRandomIndex(delta)]; + TNode vpNode = new TNode(randomNode.get()); if (DEBUG) System.out.println("\nvp-node: " + vpNode.get().toString()); calculateDistances (vpNode , nodes, begin, end); orderDistances (nodes, begin, end); + fixVantagPoint (randomNode , nodes, begin, end); if (DEBUG) { for (int i = begin; i <= end; i++) { @@ -127,6 +129,19 @@ public class VPTreeBuilder { } } + private void fixVantagPoint (Node pivot, Node nodes[], int begin, int end) { + for (int i = begin; i < end; i++) { + if (nodes[i] == pivot) { + if (i > begin) { + Node tmp = nodes[begin]; + nodes[begin] = pivot; + nodes[i] = tmp; + break; + } + } + } + } + private void orderDistances(Node nodes[], int begin, int end) { NodeSorter.sort(nodes, begin, end); }