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

Remove old search code.

parent 8bec85f8
Branches
No related tags found
No related merge requests found
......@@ -42,63 +42,6 @@ public class KDNode {
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) {
return Math.pow((x - y), 2);
}
......@@ -107,33 +50,4 @@ public class KDNode {
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;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.PriorityQueue;
// TODO(Moravec): One more time read the paper and check the implementation!
......@@ -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 final KDNode node;
private final double distance;
......@@ -113,12 +77,6 @@ public class KDTree {
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) {
PriorityQueue<NodeWithDistance> priorityQueue = new PriorityQueue<>();
......@@ -137,14 +95,14 @@ public class KDTree {
partition = current.getNode().getPartition();
if (queryVector[discriminator] < partition) {
priorityQueue.add(new NodeWithDistance(current.getNode().getLoSon(),
0.0));
0.0));
priorityQueue.add(new NodeWithDistance(current.getNode().getHiSon(),
(double) partition - (double) queryVector[discriminator]));
(double) partition - (double) queryVector[discriminator]));
} else {
priorityQueue.add(new NodeWithDistance(current.getNode().getHiSon(),
0.0));
0.0));
priorityQueue.add(new NodeWithDistance(current.getNode().getLoSon(),
(double) queryVector[discriminator] - (double) partition));
(double) queryVector[discriminator] - (double) partition));
}
}
}
......
......@@ -116,7 +116,6 @@ public class KDTreeBuilder {
public KDNode makeTerminalNode(final int[][] featureVectors) {
++nodeCount;
++terminalNodeCount;
System.out.printf("Terminal node bucket size: %d\n", featureVectors.length);
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