summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNPreprocessor.java
diff options
context:
space:
mode:
authorAndrej Shadura <andrewsh@debian.org>2019-03-09 22:30:33 +0000
committerAndrej Shadura <andrewsh@debian.org>2019-03-09 22:30:33 +0000
commitace5fa7f57d49756c0e1b111a30f3b6a9436c1cb (patch)
tree041e034bddeeaf574c02ca8f040b1359cef00133 /src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNPreprocessor.java
parentc36aa2a8fd31ca5e225ff30278e910070cd2c8c1 (diff)
Import Upstream version 0.5.0
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNPreprocessor.java')
-rw-r--r--src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNPreprocessor.java42
1 files changed, 22 insertions, 20 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNPreprocessor.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNPreprocessor.java
index fcd6fad1..cdc3fce4 100644
--- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNPreprocessor.java
+++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNPreprocessor.java
@@ -31,6 +31,7 @@ import javax.swing.event.EventListenerList;
import de.lmu.ifi.dbs.elki.database.ids.ArrayDBIDs;
import de.lmu.ifi.dbs.elki.database.ids.ArrayModifiableDBIDs;
import de.lmu.ifi.dbs.elki.database.ids.DBID;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
import de.lmu.ifi.dbs.elki.database.ids.HashSetModifiableDBIDs;
@@ -127,9 +128,9 @@ public class MaterializeKNNPreprocessor<O, D extends Distance<D>> extends Abstra
}
}
else {
- for(DBID id : ids) {
- KNNResult<D> knn = knnQuery.getKNNForDBID(id, k);
- storage.put(id, knn);
+ for (DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) {
+ KNNResult<D> knn = knnQuery.getKNNForDBID(iter, k);
+ storage.put(iter, knn);
if(progress != null) {
progress.incrementProcessed(getLogger());
}
@@ -150,8 +151,9 @@ public class MaterializeKNNPreprocessor<O, D extends Distance<D>> extends Abstra
public void insertAll(DBIDs ids) {
if(storage == null && ids.size() > 0) {
preprocess();
+ } else {
+ objectsInserted(ids);
}
- objectsInserted(ids);
}
@Override
@@ -213,25 +215,25 @@ public class MaterializeKNNPreprocessor<O, D extends Distance<D>> extends Abstra
private ArrayDBIDs updateKNNsAfterInsertion(DBIDs ids) {
ArrayModifiableDBIDs rkNN_ids = DBIDUtil.newArray();
DBIDs oldids = DBIDUtil.difference(relation.getDBIDs(), ids);
- for(DBID id1 : oldids) {
- KNNResult<D> kNNs = storage.get(id1);
+ for (DBIDIter iter = oldids.iter(); iter.valid(); iter.advance()) {
+ KNNResult<D> kNNs = storage.get(iter);
D knnDist = kNNs.get(kNNs.size() - 1).getDistance();
// look for new kNNs
KNNHeap<D> heap = null;
- for(DBID id2 : ids) {
- D dist = distanceQuery.distance(id1, id2);
+ for (DBIDIter iter2 = ids.iter(); iter2.valid(); iter2.advance()) {
+ D dist = distanceQuery.distance(iter, iter2);
if(dist.compareTo(knnDist) <= 0) {
if(heap == null) {
heap = new KNNHeap<D>(k);
heap.addAll(kNNs);
}
- heap.add(dist, id2);
+ heap.add(dist, iter2);
}
}
if(heap != null) {
kNNs = heap.toKNNList();
- storage.put(id1, kNNs);
- rkNN_ids.add(id1);
+ storage.put(iter, kNNs);
+ rkNN_ids.add(iter);
}
}
return rkNN_ids;
@@ -247,11 +249,11 @@ public class MaterializeKNNPreprocessor<O, D extends Distance<D>> extends Abstra
private ArrayDBIDs updateKNNsAfterDeletion(DBIDs ids) {
SetDBIDs idsSet = DBIDUtil.ensureSet(ids);
ArrayModifiableDBIDs rkNN_ids = DBIDUtil.newArray();
- for(DBID id1 : relation.iterDBIDs()) {
- KNNResult<D> kNNs = storage.get(id1);
+ for(DBIDIter iditer = relation.iterDBIDs(); iditer.valid(); iditer.advance()) {
+ KNNResult<D> kNNs = storage.get(iditer);
for(DistanceResultPair<D> kNN : kNNs) {
- if(idsSet.contains(kNN.getDBID())) {
- rkNN_ids.add(id1);
+ if(idsSet.contains(kNN)) {
+ rkNN_ids.add(iditer);
break;
}
}
@@ -280,8 +282,8 @@ public class MaterializeKNNPreprocessor<O, D extends Distance<D>> extends Abstra
if(stepprog != null) {
stepprog.beginStep(1, "New deletions ocurred, remove their materialized kNNs.", getLogger());
}
- for(DBID id : ids) {
- storage.delete(id);
+ for (DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) {
+ storage.delete(iter);
}
// update the affected kNNs
@@ -349,11 +351,11 @@ public class MaterializeKNNPreprocessor<O, D extends Distance<D>> extends Abstra
HashSetModifiableDBIDs ids = DBIDUtil.newHashSet();
for(Collection<DistanceResultPair<D>> drps : extraxt) {
for(DistanceResultPair<D> drp : drps) {
- ids.add(drp.getDBID());
+ ids.add(drp);
}
}
- for(DBID id : remove) {
- ids.remove(id);
+ for (DBIDIter iter = remove.iter(); iter.valid(); iter.advance()) {
+ ids.remove(iter);
}
// Convert back to array
return DBIDUtil.newArray(ids);