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