From 1e08f03b45f8579fcb216385aaf1a0e52fc58c83 Mon Sep 17 00:00:00 2001 From: Vojtech Moravec <vojtech.moravec.st@vsb.cz> Date: Mon, 7 Sep 2020 15:51:19 +0200 Subject: [PATCH] Modify the BBF search to use vector index only. --- .../java/azgracompress/kdtree/KDTree.java | 26 +++++++++---------- .../azgracompress/kdtree/TerminalKDNode.java | 4 +-- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/azgracompress/kdtree/KDTree.java b/src/main/java/azgracompress/kdtree/KDTree.java index 04ab7fc..4c286de 100644 --- a/src/main/java/azgracompress/kdtree/KDTree.java +++ b/src/main/java/azgracompress/kdtree/KDTree.java @@ -22,30 +22,30 @@ public class KDTree { public static class BBFSearchInfo { private final int[][] featureVectors; - private double nearestRecordDistance; - private int[] nearestRecord; + private double nearestVectorDistance; + private int nearestVectorIndex; public BBFSearchInfo(final int[][] featureVectors) { this.featureVectors = featureVectors; - nearestRecord = null; - nearestRecordDistance = Double.POSITIVE_INFINITY; + nearestVectorIndex = -1; + nearestVectorDistance = Double.POSITIVE_INFINITY; } public int[][] getFeatureVectors() { return featureVectors; } - public double getNearestRecordDistance() { - return nearestRecordDistance; + public double getNearestVectorDistance() { + return nearestVectorDistance; } - public int[] getNearestRecord() { - return nearestRecord; + public int getNearestVectorIndex() { + return nearestVectorIndex; } - public void setNearestRecord(final int[] record, final double recordDistance) { - this.nearestRecord = record; - this.nearestRecordDistance = recordDistance; + public void setNearestRecord(final int vectorIndex, final double recordDistance) { + this.nearestVectorIndex = vectorIndex; + this.nearestVectorDistance = recordDistance; } } @@ -85,7 +85,7 @@ public class KDTree { this.terminalNodeCount = terminalNodeCount; } - public int[] findNearestBBF(final int[] queryVector, final int maxE) { + public int findNearestBBF(final int[] queryVector, final int maxE) { PriorityQueue<NodeWithDistance> priorityQueue = new PriorityQueue<>(); priorityQueue.add(new NodeWithDistance(root, 0.0)); @@ -114,7 +114,7 @@ public class KDTree { } } } - return searchInfo.getNearestRecord(); + return searchInfo.getNearestVectorIndex(); } public int getTotalNodeCount() { diff --git a/src/main/java/azgracompress/kdtree/TerminalKDNode.java b/src/main/java/azgracompress/kdtree/TerminalKDNode.java index 8ba4fc7..0dac9c4 100644 --- a/src/main/java/azgracompress/kdtree/TerminalKDNode.java +++ b/src/main/java/azgracompress/kdtree/TerminalKDNode.java @@ -24,8 +24,8 @@ public class TerminalKDNode extends KDNode { double recordDistance; for (final int index : bucketIndices) { recordDistance = Utils.calculateEuclideanDistance(queryRecord, searchInfo.getFeatureVectors()[index]); - if (recordDistance < searchInfo.getNearestRecordDistance()) { - searchInfo.setNearestRecord(searchInfo.getFeatureVectors()[index], recordDistance); + if (recordDistance < searchInfo.getNearestVectorDistance()) { + searchInfo.setNearestRecord(index, recordDistance); } } } -- GitLab