Skip to content
Snippets Groups Projects
Commit 047241bc authored by Vojtech Moravec's avatar Vojtech Moravec
Browse files

Remove old search code.

parent 8bec85f8
No related branches found
No related tags found
No related merge requests found
...@@ -42,63 +42,6 @@ public class KDNode { ...@@ -42,63 +42,6 @@ public class KDNode {
return false; return false;
} }
public void findNearestNeighbor(final int[] queryRecord, final KDTree.SearchInfo searchInfo) {
if (searchInfo.stopSearching())
return;
if (isTerminal()) {
((TerminalKDNode) this).findNearestNeighborInBucket(queryRecord, searchInfo);
if (ballWithinBounds(queryRecord, searchInfo)) {
searchInfo.setContinueSearching(false);
}
return;
}
assert (loSon != null && hiSon != null);
if (queryRecord[discriminator] <= partition) {
double tmp = searchInfo.getUpperBounds()[discriminator];
searchInfo.getUpperBounds()[discriminator] = partition;
loSon.findNearestNeighbor(queryRecord, searchInfo);
searchInfo.getUpperBounds()[discriminator] = tmp;
} else {
double tmp = searchInfo.getLowerBounds()[discriminator];
searchInfo.getLowerBounds()[discriminator] = partition;
hiSon.findNearestNeighbor(queryRecord, searchInfo);
searchInfo.getLowerBounds()[discriminator] = tmp;
}
if (searchInfo.stopSearching())
return;
if (queryRecord[discriminator] <= partition) {
double tmp = searchInfo.getLowerBounds()[discriminator];
searchInfo.getLowerBounds()[discriminator] = partition;
if (boundsOverlapBall(queryRecord, searchInfo)) {
hiSon.findNearestNeighbor(queryRecord, searchInfo);
}
searchInfo.getLowerBounds()[discriminator] = tmp;
} else {
double tmp = searchInfo.getUpperBounds()[discriminator];
searchInfo.getUpperBounds()[discriminator] = partition;
if (boundsOverlapBall(queryRecord, searchInfo)) {
loSon.findNearestNeighbor(queryRecord, searchInfo);
}
searchInfo.getUpperBounds()[discriminator] = tmp;
}
if (searchInfo.stopSearching())
return;
if (ballWithinBounds(queryRecord, searchInfo)) {
searchInfo.setContinueSearching(false);
}
}
private static double coordinateDistance(final double x, final double y) { private static double coordinateDistance(final double x, final double y) {
return Math.pow((x - y), 2); return Math.pow((x - y), 2);
} }
...@@ -107,33 +50,4 @@ public class KDNode { ...@@ -107,33 +50,4 @@ public class KDNode {
return Math.sqrt(value); return Math.sqrt(value);
} }
private boolean ballWithinBounds(final int[] queryRecord, final KDTree.SearchInfo searchInfo) {
double lbDist, ubDist;
for (int d = 0; d < searchInfo.getDimension(); d++) {
lbDist = coordinateDistance(searchInfo.getLowerBounds()[d], queryRecord[d]);
ubDist = coordinateDistance(searchInfo.getUpperBounds()[d], queryRecord[d]);
if ((lbDist <= searchInfo.getNearestRecordDistance()) || (ubDist <= searchInfo.getNearestRecordDistance())) {
return false;
}
}
return true;
}
private boolean boundsOverlapBall(final int[] queryRecord, final KDTree.SearchInfo searchInfo) {
double sum = 0.0;
for (int d = 0; d < searchInfo.getDimension(); d++) {
if (queryRecord[d] < searchInfo.getLowerBounds()[d]) {
sum += coordinateDistance(queryRecord[d], searchInfo.getLowerBounds()[d]);
if (dissimilarity(sum) > searchInfo.getNearestRecordDistance()) {
return true;
}
} else if (queryRecord[d] > searchInfo.getUpperBounds()[d]) {
sum += coordinateDistance(queryRecord[d], searchInfo.getUpperBounds()[d]);
if (dissimilarity(sum) > searchInfo.getNearestRecordDistance()) {
return true;
}
}
}
return false;
}
} }
...@@ -2,7 +2,6 @@ package azgracompress.kdtree; ...@@ -2,7 +2,6 @@ package azgracompress.kdtree;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.PriorityQueue; import java.util.PriorityQueue;
// TODO(Moravec): One more time read the paper and check the implementation! // TODO(Moravec): One more time read the paper and check the implementation!
...@@ -43,41 +42,6 @@ public class KDTree { ...@@ -43,41 +42,6 @@ public class KDTree {
} }
} }
public static class SearchInfo extends BBFSearchInfo {
private boolean continueSearching = true;
private final double[] coordinateUpperBound;
private final double[] coordinateLowerBound;
private final int dimension;
public SearchInfo(final int dimension) {
this.dimension = dimension;
coordinateUpperBound = new double[dimension];
coordinateLowerBound = new double[dimension];
Arrays.fill(coordinateLowerBound, Double.NEGATIVE_INFINITY);
Arrays.fill(coordinateUpperBound, Double.POSITIVE_INFINITY);
}
public int getDimension() {
return dimension;
}
public double[] getUpperBounds() {
return coordinateUpperBound;
}
public double[] getLowerBounds() {
return coordinateLowerBound;
}
public boolean stopSearching() {
return !continueSearching;
}
public void setContinueSearching(boolean continueSearching) {
this.continueSearching = continueSearching;
}
}
private static class NodeWithDistance implements Comparable<NodeWithDistance> { private static class NodeWithDistance implements Comparable<NodeWithDistance> {
private final KDNode node; private final KDNode node;
private final double distance; private final double distance;
...@@ -113,12 +77,6 @@ public class KDTree { ...@@ -113,12 +77,6 @@ public class KDTree {
this.terminalNodeCount = terminalNodeCount; this.terminalNodeCount = terminalNodeCount;
} }
public int[] findNearestNeighbor(final int[] queryRecord) {
SearchInfo searchInfo = new SearchInfo(dimension);
root.findNearestNeighbor(queryRecord, searchInfo);
return searchInfo.getNearestRecord();
}
public int[] findNearestBBF(final int[] queryVector, final int maxE) { public int[] findNearestBBF(final int[] queryVector, final int maxE) {
PriorityQueue<NodeWithDistance> priorityQueue = new PriorityQueue<>(); PriorityQueue<NodeWithDistance> priorityQueue = new PriorityQueue<>();
...@@ -137,14 +95,14 @@ public class KDTree { ...@@ -137,14 +95,14 @@ public class KDTree {
partition = current.getNode().getPartition(); partition = current.getNode().getPartition();
if (queryVector[discriminator] < partition) { if (queryVector[discriminator] < partition) {
priorityQueue.add(new NodeWithDistance(current.getNode().getLoSon(), priorityQueue.add(new NodeWithDistance(current.getNode().getLoSon(),
0.0)); 0.0));
priorityQueue.add(new NodeWithDistance(current.getNode().getHiSon(), priorityQueue.add(new NodeWithDistance(current.getNode().getHiSon(),
(double) partition - (double) queryVector[discriminator])); (double) partition - (double) queryVector[discriminator]));
} else { } else {
priorityQueue.add(new NodeWithDistance(current.getNode().getHiSon(), priorityQueue.add(new NodeWithDistance(current.getNode().getHiSon(),
0.0)); 0.0));
priorityQueue.add(new NodeWithDistance(current.getNode().getLoSon(), priorityQueue.add(new NodeWithDistance(current.getNode().getLoSon(),
(double) queryVector[discriminator] - (double) partition)); (double) queryVector[discriminator] - (double) partition));
} }
} }
} }
......
...@@ -116,7 +116,6 @@ public class KDTreeBuilder { ...@@ -116,7 +116,6 @@ public class KDTreeBuilder {
public KDNode makeTerminalNode(final int[][] featureVectors) { public KDNode makeTerminalNode(final int[][] featureVectors) {
++nodeCount; ++nodeCount;
++terminalNodeCount; ++terminalNodeCount;
System.out.printf("Terminal node bucket size: %d\n", featureVectors.length);
return new TerminalKDNode(featureVectors); return new TerminalKDNode(featureVectors);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment