diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/index/preprocessed')
21 files changed, 139 insertions, 134 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/LocalProjectionIndex.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/LocalProjectionIndex.java index cef2fbdc..4e187a9c 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/LocalProjectionIndex.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/LocalProjectionIndex.java @@ -24,7 +24,7 @@ package de.lmu.ifi.dbs.elki.index.preprocessed; */ import de.lmu.ifi.dbs.elki.data.NumberVector; -import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.index.Index; import de.lmu.ifi.dbs.elki.index.IndexFactory; @@ -44,10 +44,10 @@ public interface LocalProjectionIndex<V extends NumberVector<?, ?>, P extends Pr /** * Get the precomputed local projection for a particular object ID. * - * @param objid Object ID + * @param id Object ID * @return local projection */ - public P getLocalProjection(DBID objid); + public P getLocalProjection(DBIDRef id); /** * Factory diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/AbstractMaterializeKNNPreprocessor.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/AbstractMaterializeKNNPreprocessor.java index b9b72d87..21e0abf7 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/AbstractMaterializeKNNPreprocessor.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/AbstractMaterializeKNNPreprocessor.java @@ -27,7 +27,7 @@ import de.lmu.ifi.dbs.elki.data.type.TypeInformation; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil; import de.lmu.ifi.dbs.elki.database.datastore.WritableDataStore; -import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; import de.lmu.ifi.dbs.elki.database.ids.DBIDs; import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery; import de.lmu.ifi.dbs.elki.database.query.knn.KNNQuery; @@ -120,17 +120,17 @@ public abstract class AbstractMaterializeKNNPreprocessor<O, D extends Distance<D /** * Get the k nearest neighbors. * - * @param objid Object ID + * @param id Object ID * @return Neighbors */ - public KNNResult<D> get(DBID objid) { + public KNNResult<D> get(DBIDRef id) { if(storage == null) { if(getLogger().isDebugging()) { getLogger().debug("Running kNN preprocessor: " + this.getClass()); } preprocess(); } - return storage.get(objid); + return storage.get(id); } /** diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNAndRKNNPreprocessor.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNAndRKNNPreprocessor.java index 1436efe2..c200472b 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNAndRKNNPreprocessor.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNAndRKNNPreprocessor.java @@ -36,6 +36,8 @@ import de.lmu.ifi.dbs.elki.database.datastore.WritableDataStore; 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.DBIDRef; 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.SetDBIDs; @@ -104,9 +106,9 @@ public class MaterializeKNNAndRKNNPreprocessor<O, D extends Distance<D>> extends */ private void materializeKNNAndRKNNs(ArrayDBIDs ids, FiniteProgress progress) { // add an empty list to each rknn - for(DBID id : ids) { - if(materialized_RkNN.get(id) == null) { - materialized_RkNN.put(id, new TreeSet<DistanceResultPair<D>>()); + for (DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) { + if(materialized_RkNN.get(iter) == null) { + materialized_RkNN.put(iter, new TreeSet<DistanceResultPair<D>>()); } } @@ -117,7 +119,7 @@ public class MaterializeKNNAndRKNNPreprocessor<O, D extends Distance<D>> extends KNNResult<D> kNNs = kNNList.get(i); storage.put(id, kNNs); for(DistanceResultPair<D> kNN : kNNs) { - Set<DistanceResultPair<D>> rknns = materialized_RkNN.get(kNN.getDBID()); + Set<DistanceResultPair<D>> rknns = materialized_RkNN.get(kNN); rknns.add(new GenericDistanceResultPair<D>(kNN.getDistance(), id)); } if(progress != null) { @@ -169,24 +171,24 @@ public class MaterializeKNNAndRKNNPreprocessor<O, D extends Distance<D>> extends private ArrayDBIDs updateKNNsAndRkNNs(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.getKNNDistance(); // 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) { KNNList<D> newKNNs = heap.toKNNList(); - storage.put(id1, newKNNs); + storage.put(iter, newKNNs); // get the difference int i = 0; @@ -196,7 +198,7 @@ public class MaterializeKNNAndRKNNPreprocessor<O, D extends Distance<D>> extends while(i < kNNs.size() && j < newKNNs.size()) { DistanceResultPair<D> drp1 = kNNs.get(i); DistanceResultPair<D> drp2 = newKNNs.get(j); - if(!drp1.equals(drp2)) { + if(!drp1.sameDBID(drp2)) { added.add(drp2); j++; } @@ -211,16 +213,16 @@ public class MaterializeKNNAndRKNNPreprocessor<O, D extends Distance<D>> extends } // add new RkNN for(DistanceResultPair<D> drp : added) { - Set<DistanceResultPair<D>> rknns = materialized_RkNN.get(drp.getDBID()); - rknns.add(new GenericDistanceResultPair<D>(drp.getDistance(), id1)); + Set<DistanceResultPair<D>> rknns = materialized_RkNN.get(drp); + rknns.add(new GenericDistanceResultPair<D>(drp.getDistance(), iter.getDBID())); } // remove old RkNN for(DistanceResultPair<D> drp : removed) { - Set<DistanceResultPair<D>> rknns = materialized_RkNN.get(drp.getDBID()); - rknns.remove(new GenericDistanceResultPair<D>(drp.getDistance(), id1)); + Set<DistanceResultPair<D>> rknns = materialized_RkNN.get(drp); + rknns.remove(new GenericDistanceResultPair<D>(drp.getDistance(), iter.getDBID())); } - rkNN_ids.add(id1); + rkNN_ids.add(iter); } } return rkNN_ids; @@ -237,11 +239,11 @@ public class MaterializeKNNAndRKNNPreprocessor<O, D extends Distance<D>> extends } List<KNNResult<D>> kNNs = new ArrayList<KNNResult<D>>(ids.size()); List<List<DistanceResultPair<D>>> rkNNs = new ArrayList<List<DistanceResultPair<D>>>(ids.size()); - for(DBID id : aids) { - kNNs.add(storage.get(id)); - storage.delete(id); - rkNNs.add(new ArrayList<DistanceResultPair<D>>(materialized_RkNN.get(id))); - materialized_RkNN.delete(id); + for (DBIDIter iter = aids.iter(); iter.valid(); iter.advance()) { + kNNs.add(storage.get(iter)); + storage.delete(iter); + rkNNs.add(new ArrayList<DistanceResultPair<D>>(materialized_RkNN.get(iter))); + materialized_RkNN.delete(iter); } ArrayDBIDs kNN_ids = extractAndRemoveIDs(kNNs, aids); ArrayDBIDs rkNN_ids = extractAndRemoveIDs(rkNNs, aids); @@ -256,8 +258,7 @@ public class MaterializeKNNAndRKNNPreprocessor<O, D extends Distance<D>> extends DBID id = rkNN_ids.get(i); storage.put(id, kNNList.get(i)); for(DistanceResultPair<D> kNN : kNNList.get(i)) { - Set<DistanceResultPair<D>> rknns = materialized_RkNN.get(kNN.getDBID()); - rknns.add(new GenericDistanceResultPair<D>(kNN.getDistance(), id)); + materialized_RkNN.get(kNN).add(new GenericDistanceResultPair<D>(kNN.getDistance(), id)); } } // update the RkNNs of the kNNs @@ -267,7 +268,7 @@ public class MaterializeKNNAndRKNNPreprocessor<O, D extends Distance<D>> extends SortedSet<DistanceResultPair<D>> rkNN = materialized_RkNN.get(id); for(Iterator<DistanceResultPair<D>> it = rkNN.iterator(); it.hasNext();) { DistanceResultPair<D> drp = it.next(); - if(idsSet.contains(drp.getDBID())) { + if(idsSet.contains(drp)) { it.remove(); } } @@ -300,7 +301,7 @@ public class MaterializeKNNAndRKNNPreprocessor<O, D extends Distance<D>> extends * @param id the query id * @return the RkNNs */ - public List<DistanceResultPair<D>> getRKNN(DBID id) { + public List<DistanceResultPair<D>> getRKNN(DBIDRef id) { SortedSet<DistanceResultPair<D>> rKNN = materialized_RkNN.get(id); if(rKNN == null) return null; 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); diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MetricalIndexApproximationMaterializeKNNPreprocessor.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MetricalIndexApproximationMaterializeKNNPreprocessor.java index 5ac7d2d2..d3df7855 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MetricalIndexApproximationMaterializeKNNPreprocessor.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MetricalIndexApproximationMaterializeKNNPreprocessor.java @@ -28,7 +28,8 @@ import java.util.HashMap; import java.util.List; import de.lmu.ifi.dbs.elki.data.NumberVector; -import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.ArrayModifiableDBIDs; +import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.database.ids.DBIDPair; import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery; @@ -108,14 +109,14 @@ public class MetricalIndexApproximationMaterializeKNNPreprocessor<O extends Numb getLogger().debugFinest("NumEntires = " + size); } // Collect the ids in this node. - DBID[] ids = new DBID[size]; + ArrayModifiableDBIDs ids = DBIDUtil.newArray(size); for(int i = 0; i < size; i++) { - ids[i] = ((LeafEntry) node.getEntry(i)).getDBID(); + ids.add(((LeafEntry) node.getEntry(i)).getDBID()); } HashMap<DBIDPair, D> cache = new HashMap<DBIDPair, D>(size * size * 3 / 8); - for(DBID id : ids) { + for(DBIDIter id = ids.iter(); id.valid(); id.advance()) { KNNHeap<D> kNN = new KNNHeap<D>(k, distanceQuery.infiniteDistance()); - for(DBID id2 : ids) { + for(DBIDIter id2 = ids.iter(); id2.valid(); id2.advance()) { DBIDPair key = DBIDUtil.newPair(id, id2); D d = cache.remove(key); if(d != null) { diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/PartitionApproximationMaterializeKNNPreprocessor.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/PartitionApproximationMaterializeKNNPreprocessor.java index 90813b92..79c70642 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/PartitionApproximationMaterializeKNNPreprocessor.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/PartitionApproximationMaterializeKNNPreprocessor.java @@ -29,7 +29,7 @@ import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil; 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.DBIDPair; import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery; @@ -109,26 +109,26 @@ public class PartitionApproximationMaterializeKNNPreprocessor<O, D extends Dista ids.add(aids.get(i * partitions + part)); } HashMap<DBIDPair, D> cache = new HashMap<DBIDPair, D>(size * size * 3 / 8); - for(DBID id : ids) { + for (DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) { KNNHeap<D> kNN = new KNNHeap<D>(k, distanceQuery.infiniteDistance()); - for(DBID id2 : ids) { - DBIDPair key = DBIDUtil.newPair(id, id2); + for (DBIDIter iter2 = ids.iter(); iter2.valid(); iter2.advance()) { + DBIDPair key = DBIDUtil.newPair(iter, iter2); D d = cache.remove(key); if(d != null) { // consume the previous result. - kNN.add(d, id2); + kNN.add(d, iter2); } else { // compute new and store the previous result. - d = distanceQuery.distance(id, id2); - kNN.add(d, id2); + d = distanceQuery.distance(iter, iter2); + kNN.add(d, iter2); // put it into the cache, but with the keys reversed - key = DBIDUtil.newPair(id2, id); + key = DBIDUtil.newPair(iter2, iter); cache.put(key, d); } } ksize.put(kNN.size()); - storage.put(id, kNN.toKNNList()); + storage.put(iter, kNN.toKNNList()); } if(logger.isDebugging()) { if(cache.size() > 0) { diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/RandomSampleKNNPreprocessor.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/RandomSampleKNNPreprocessor.java index 924c7c3c..fa868109 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/RandomSampleKNNPreprocessor.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/RandomSampleKNNPreprocessor.java @@ -28,10 +28,9 @@ import java.util.Random; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil; import de.lmu.ifi.dbs.elki.database.ids.ArrayDBIDs; -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.query.GenericDistanceResultPair; import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery; import de.lmu.ifi.dbs.elki.database.query.knn.KNNResult; import de.lmu.ifi.dbs.elki.database.relation.Relation; @@ -97,17 +96,17 @@ public class RandomSampleKNNPreprocessor<O, D extends Distance<D>> extends Abstr final long iseed = (seed != null) ? seed : (new Random()).nextLong(); int i = 0; - for(DBID id : ids) { + for (DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) { KNNHeap<D> kNN = new KNNHeap<D>(k, distanceQuery.infiniteDistance()); long rseed = i * 0x7FFFFFFFFFFFFFE7L + iseed; DBIDs rsamp = DBIDUtil.randomSample(ids, samplesize, rseed); - for(DBID oid : rsamp) { - D dist = distanceQuery.distance(id, oid); - kNN.add(new GenericDistanceResultPair<D>(dist, oid)); + for (DBIDIter iter2 = rsamp.iter(); iter2.valid(); iter2.advance()) { + D dist = distanceQuery.distance(iter, iter2); + kNN.add(dist, iter2); } - storage.put(id, kNN.toKNNList()); + storage.put(iter, kNN.toKNNList()); if(progress != null) { progress.incrementProcessed(getLogger()); } diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpatialApproximationMaterializeKNNPreprocessor.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpatialApproximationMaterializeKNNPreprocessor.java index e78f5e89..b206194b 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpatialApproximationMaterializeKNNPreprocessor.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpatialApproximationMaterializeKNNPreprocessor.java @@ -30,7 +30,8 @@ import java.util.List; import de.lmu.ifi.dbs.elki.data.NumberVector; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil; -import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.ArrayModifiableDBIDs; +import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.database.ids.DBIDPair; import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery; @@ -113,14 +114,14 @@ public class SpatialApproximationMaterializeKNNPreprocessor<O extends NumberVect getLogger().debugFinest("NumEntires = " + size); } // Collect the ids in this node. - DBID[] ids = new DBID[size]; + ArrayModifiableDBIDs ids = DBIDUtil.newArray(size); for(int i = 0; i < size; i++) { - ids[i] = ((LeafEntry) node.getEntry(i)).getDBID(); + ids.add(((LeafEntry) node.getEntry(i)).getDBID()); } HashMap<DBIDPair, D> cache = new HashMap<DBIDPair, D>(size * size * 3 / 8); - for(DBID id : ids) { + for(DBIDIter id = ids.iter(); id.valid(); id.advance()) { KNNHeap<D> kNN = new KNNHeap<D>(k, distanceQuery.infiniteDistance()); - for(DBID id2 : ids) { + for(DBIDIter id2 = ids.iter(); id2.valid(); id2.advance()) { DBIDPair key = DBIDUtil.newPair(id, id2); D d = cache.remove(key); if(d != null) { diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/AbstractFilteredPCAIndex.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/AbstractFilteredPCAIndex.java index 9cb2b997..99e956c8 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/AbstractFilteredPCAIndex.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/AbstractFilteredPCAIndex.java @@ -30,6 +30,8 @@ import de.lmu.ifi.dbs.elki.data.type.TypeInformation; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil; 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.DBIDRef; import de.lmu.ifi.dbs.elki.database.query.DistanceResultPair; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction; @@ -99,7 +101,8 @@ public abstract class AbstractFilteredPCAIndex<NV extends NumberVector<? extends FiniteProgress progress = getLogger().isVerbose() ? new FiniteProgress("Performing local PCA", relation.size(), getLogger()) : null; // TODO: use a bulk operation? - for(DBID id : relation.iterDBIDs()) { + for(DBIDIter iditer = relation.iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); Collection<DistanceResultPair<DoubleDistance>> objects = objectsForPCA(id); PCAFilteredResult pcares = pca.processQueryResult(objects, relation); @@ -122,7 +125,7 @@ public abstract class AbstractFilteredPCAIndex<NV extends NumberVector<? extends } @Override - public PCAFilteredResult getLocalProjection(DBID objid) { + public PCAFilteredResult getLocalProjection(DBIDRef objid) { if(storage == null) { preprocess(); } diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/FilteredLocalPCAIndex.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/FilteredLocalPCAIndex.java index 8130f6b3..bc5d08c1 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/FilteredLocalPCAIndex.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/FilteredLocalPCAIndex.java @@ -24,7 +24,7 @@ package de.lmu.ifi.dbs.elki.index.preprocessed.localpca; */ import de.lmu.ifi.dbs.elki.data.NumberVector; -import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.index.preprocessed.LocalProjectionIndex; import de.lmu.ifi.dbs.elki.math.linearalgebra.pca.PCAFilteredResult; @@ -44,7 +44,7 @@ public interface FilteredLocalPCAIndex<NV extends NumberVector<?, ?>> extends Lo * @return Matrix */ @Override - public PCAFilteredResult getLocalProjection(DBID objid); + public PCAFilteredResult getLocalProjection(DBIDRef objid); /** * Factory interface diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/RangeQueryFilteredPCAIndex.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/RangeQueryFilteredPCAIndex.java index 7d5da770..99937dbf 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/RangeQueryFilteredPCAIndex.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/RangeQueryFilteredPCAIndex.java @@ -23,12 +23,10 @@ package de.lmu.ifi.dbs.elki.index.preprocessed.localpca; along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import java.util.List; - import de.lmu.ifi.dbs.elki.data.NumberVector; import de.lmu.ifi.dbs.elki.database.QueryUtil; import de.lmu.ifi.dbs.elki.database.ids.DBID; -import de.lmu.ifi.dbs.elki.database.query.DistanceResultPair; +import de.lmu.ifi.dbs.elki.database.query.DistanceDBIDResult; import de.lmu.ifi.dbs.elki.database.query.range.RangeQuery; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction; @@ -86,7 +84,7 @@ public class RangeQueryFilteredPCAIndex<NV extends NumberVector<? extends NV, ?> } @Override - protected List<DistanceResultPair<DoubleDistance>> objectsForPCA(DBID id) { + protected DistanceDBIDResult<DoubleDistance> objectsForPCA(DBID id) { return rangeQuery.getRangeForDBID(id, epsilon); } diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/preference/AbstractPreferenceVectorIndex.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/preference/AbstractPreferenceVectorIndex.java index 95c698ee..387985ab 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/preference/AbstractPreferenceVectorIndex.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/preference/AbstractPreferenceVectorIndex.java @@ -28,7 +28,7 @@ import java.util.BitSet; import de.lmu.ifi.dbs.elki.data.NumberVector; import de.lmu.ifi.dbs.elki.data.type.TypeInformation; import de.lmu.ifi.dbs.elki.data.type.TypeUtil; -import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.index.preprocessed.AbstractPreprocessorIndex; import de.lmu.ifi.dbs.elki.utilities.optionhandling.Parameterizable; @@ -56,7 +56,7 @@ public abstract class AbstractPreferenceVectorIndex<NV extends NumberVector<?, ? abstract protected void preprocess(); @Override - public BitSet getPreferenceVector(DBID objid) { + public BitSet getPreferenceVector(DBIDRef objid) { if(storage == null) { preprocess(); } diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/preference/DiSHPreferenceVectorIndex.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/preference/DiSHPreferenceVectorIndex.java index ade6c114..416a5ffb 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/preference/DiSHPreferenceVectorIndex.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/preference/DiSHPreferenceVectorIndex.java @@ -27,7 +27,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.BitSet; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; @@ -42,9 +41,11 @@ import de.lmu.ifi.dbs.elki.database.UpdatableDatabase; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil; 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.ModifiableDBIDs; +import de.lmu.ifi.dbs.elki.database.query.DistanceDBIDResult; import de.lmu.ifi.dbs.elki.database.query.DistanceResultPair; import de.lmu.ifi.dbs.elki.database.query.distance.PrimitiveDistanceQuery; import de.lmu.ifi.dbs.elki.database.query.range.RangeQuery; @@ -161,9 +162,9 @@ public class DiSHPreferenceVectorIndex<V extends NumberVector<?, ?>> extends Abs // epsilons as string RangeQuery<V, DoubleDistance>[] rangeQueries = initRangeQueries(relation, dim); - for(Iterator<DBID> it = relation.iterDBIDs(); it.hasNext();) { + for(DBIDIter it = relation.iterDBIDs(); it.valid(); it.advance()) { StringBuffer msg = new StringBuffer(); - final DBID id = it.next(); + final DBID id = it.getDBID(); if(logger.isDebugging()) { msg.append("\nid = ").append(id); @@ -174,7 +175,7 @@ public class DiSHPreferenceVectorIndex<V extends NumberVector<?, ?>> extends Abs // determine neighbors in each dimension ModifiableDBIDs[] allNeighbors = ClassGenericsUtil.newArrayOfNull(dim, ModifiableDBIDs.class); for(int d = 0; d < dim; d++) { - List<DistanceResultPair<DoubleDistance>> qrList = rangeQueries[d].getRangeForDBID(id, epsilon[d]); + DistanceDBIDResult<DoubleDistance> qrList = rangeQueries[d].getRangeForDBID(id, epsilon[d]); allNeighbors[d] = DBIDUtil.newHashSet(qrList.size()); for(DistanceResultPair<DoubleDistance> qr : qrList) { allNeighbors[d].add(qr.getDBID()); @@ -260,8 +261,8 @@ public class DiSHPreferenceVectorIndex<V extends NumberVector<?, ?>> extends Abs // database for apriori UpdatableDatabase apriori_db = new HashmapDatabase(); SimpleTypeInformation<?> bitmeta = VectorFieldTypeInformation.get(BitVector.class, dimensionality); - for(Iterator<DBID> it = relation.iterDBIDs(); it.hasNext();) { - DBID id = it.next(); + for(DBIDIter it = relation.iterDBIDs(); it.valid(); it.advance()) { + DBID id = it.getDBID(); Bit[] bits = new Bit[dimensionality]; boolean allFalse = true; for(int d = 0; d < dimensionality; d++) { diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/preference/HiSCPreferenceVectorIndex.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/preference/HiSCPreferenceVectorIndex.java index 44ddb17c..65f5f61e 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/preference/HiSCPreferenceVectorIndex.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/preference/HiSCPreferenceVectorIndex.java @@ -24,7 +24,6 @@ package de.lmu.ifi.dbs.elki.index.preprocessed.preference; */ import java.util.BitSet; -import java.util.Iterator; import de.lmu.ifi.dbs.elki.algorithm.clustering.subspace.HiSC; import de.lmu.ifi.dbs.elki.data.NumberVector; @@ -32,6 +31,7 @@ import de.lmu.ifi.dbs.elki.database.QueryUtil; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil; 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.DBIDs; import de.lmu.ifi.dbs.elki.database.query.knn.KNNQuery; import de.lmu.ifi.dbs.elki.database.query.knn.KNNResult; @@ -107,9 +107,8 @@ public class HiSCPreferenceVectorIndex<V extends NumberVector<?, ?>> extends Abs KNNQuery<V, DoubleDistance> knnQuery = QueryUtil.getKNNQuery(relation, EuclideanDistanceFunction.STATIC, k); - Iterator<DBID> it = relation.iterDBIDs(); - while(it.hasNext()) { - DBID id = it.next(); + for (DBIDIter it = relation.iterDBIDs(); it.valid(); it.advance()) { + DBID id = it.getDBID(); if(logger.isDebugging()) { msg.append("\n\nid = ").append(id); diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/preference/PreferenceVectorIndex.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/preference/PreferenceVectorIndex.java index c01e9ddb..a0fba8f3 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/preference/PreferenceVectorIndex.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/preference/PreferenceVectorIndex.java @@ -26,7 +26,7 @@ package de.lmu.ifi.dbs.elki.index.preprocessed.preference; import java.util.BitSet; import de.lmu.ifi.dbs.elki.data.NumberVector; -import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.index.Index; import de.lmu.ifi.dbs.elki.index.IndexFactory; @@ -42,10 +42,10 @@ public interface PreferenceVectorIndex<NV extends NumberVector<?, ?>> extends In /** * Get the precomputed preference vector for a particular object ID. * - * @param objid Object ID + * @param id Object ID * @return Matrix */ - public BitSet getPreferenceVector(DBID objid); + public BitSet getPreferenceVector(DBIDRef id); /** * Factory interface diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborIndex.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborIndex.java index 7efe26e0..3aa0c523 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborIndex.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborIndex.java @@ -24,7 +24,7 @@ package de.lmu.ifi.dbs.elki.index.preprocessed.snn; */ import de.lmu.ifi.dbs.elki.database.ids.ArrayDBIDs; -import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.index.Index; import de.lmu.ifi.dbs.elki.index.IndexFactory; @@ -38,10 +38,10 @@ public interface SharedNearestNeighborIndex<O> extends Index { /** * Get the precomputed nearest neighbors * - * @param objid Object ID + * @param id Object ID * @return Neighbor DBIDs */ - public ArrayDBIDs getNearestNeighborSet(DBID objid); + public ArrayDBIDs getNearestNeighborSet(DBIDRef id); /** * Get the number of neighbors diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborPreprocessor.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborPreprocessor.java index 46f47a33..e4d96028 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborPreprocessor.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborPreprocessor.java @@ -29,8 +29,10 @@ import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil; 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.DBIDRef; import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; +import de.lmu.ifi.dbs.elki.database.query.DistanceResultPair; import de.lmu.ifi.dbs.elki.database.query.knn.KNNQuery; import de.lmu.ifi.dbs.elki.database.query.knn.KNNResult; import de.lmu.ifi.dbs.elki.database.relation.Relation; @@ -112,13 +114,12 @@ public class SharedNearestNeighborPreprocessor<O, D extends Distance<D>> extends KNNQuery<O, D> knnquery = QueryUtil.getKNNQuery(relation, distanceFunction, numberOfNeighbors); FiniteProgress progress = getLogger().isVerbose() ? new FiniteProgress("assigning nearest neighbor lists", relation.size(), getLogger()) : null; - for(DBID id : relation.iterDBIDs()) { + for(DBIDIter iditer = relation.iterDBIDs(); iditer.valid(); iditer.advance()) { ArrayModifiableDBIDs neighbors = DBIDUtil.newArray(numberOfNeighbors); - KNNResult<D> kNN = knnquery.getKNNForDBID(id, numberOfNeighbors); - for(int i = 0; i < kNN.size(); i++) { - final DBID nid = kNN.get(i).getDBID(); + KNNResult<D> kNN = knnquery.getKNNForDBID(iditer, numberOfNeighbors); + for(DistanceResultPair<D> pair : kNN) { // if(!id.equals(nid)) { - neighbors.add(nid); + neighbors.add(pair); // } // Size limitation to exactly numberOfNeighbors if(neighbors.size() >= numberOfNeighbors) { @@ -126,7 +127,7 @@ public class SharedNearestNeighborPreprocessor<O, D extends Distance<D>> extends } } neighbors.sort(); - storage.put(id, neighbors); + storage.put(iditer, neighbors); if(progress != null) { progress.incrementProcessed(getLogger()); } @@ -137,7 +138,7 @@ public class SharedNearestNeighborPreprocessor<O, D extends Distance<D>> extends } @Override - public ArrayDBIDs getNearestNeighborSet(DBID objid) { + public ArrayDBIDs getNearestNeighborSet(DBIDRef objid) { if(storage == null) { preprocess(); } diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/subspaceproj/AbstractSubspaceProjectionIndex.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/subspaceproj/AbstractSubspaceProjectionIndex.java index 4a265fc9..da16dd08 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/subspaceproj/AbstractSubspaceProjectionIndex.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/subspaceproj/AbstractSubspaceProjectionIndex.java @@ -23,9 +23,6 @@ package de.lmu.ifi.dbs.elki.index.preprocessed.subspaceproj; along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import java.util.ArrayList; -import java.util.List; - import de.lmu.ifi.dbs.elki.algorithm.clustering.AbstractProjectedDBSCAN; import de.lmu.ifi.dbs.elki.data.NumberVector; import de.lmu.ifi.dbs.elki.data.type.TypeInformation; @@ -33,8 +30,11 @@ import de.lmu.ifi.dbs.elki.data.type.TypeUtil; import de.lmu.ifi.dbs.elki.database.QueryUtil; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory; import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil; -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.DBIDRef; +import de.lmu.ifi.dbs.elki.database.query.DistanceDBIDResult; import de.lmu.ifi.dbs.elki.database.query.DistanceResultPair; +import de.lmu.ifi.dbs.elki.database.query.GenericDistanceDBIDList; import de.lmu.ifi.dbs.elki.database.query.range.RangeQuery; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction; @@ -114,20 +114,20 @@ public abstract class AbstractSubspaceProjectionIndex<NV extends NumberVector<?, RangeQuery<NV, D> rangeQuery = QueryUtil.getRangeQuery(relation, rangeQueryDistanceFunction); FiniteProgress progress = getLogger().isVerbose() ? new FiniteProgress(this.getClass().getName(), relation.size(), getLogger()) : null; - for(DBID id : relation.iterDBIDs()) { - List<DistanceResultPair<D>> neighbors = rangeQuery.getRangeForDBID(id, epsilon); + for(DBIDIter iditer = relation.iterDBIDs(); iditer.valid(); iditer.advance()) { + DistanceDBIDResult<D> neighbors = rangeQuery.getRangeForDBID(iditer, epsilon); final P pres; if(neighbors.size() >= minpts) { - pres = computeProjection(id, neighbors, relation); + pres = computeProjection(iditer, neighbors, relation); } else { - DistanceResultPair<D> firstQR = neighbors.get(0); - neighbors = new ArrayList<DistanceResultPair<D>>(); + DistanceResultPair<D> firstQR = neighbors.iterator().next(); + neighbors = new GenericDistanceDBIDList<D>(); neighbors.add(firstQR); - pres = computeProjection(id, neighbors, relation); + pres = computeProjection(iditer, neighbors, relation); } - storage.put(id, pres); + storage.put(iditer, pres); if(progress != null) { progress.incrementProcessed(getLogger()); @@ -146,7 +146,7 @@ public abstract class AbstractSubspaceProjectionIndex<NV extends NumberVector<?, } @Override - public P getLocalProjection(DBID objid) { + public P getLocalProjection(DBIDRef objid) { if(storage == null) { preprocess(); } @@ -167,7 +167,7 @@ public abstract class AbstractSubspaceProjectionIndex<NV extends NumberVector<?, * * @return local subspace projection */ - protected abstract P computeProjection(DBID id, List<DistanceResultPair<D>> neighbors, Relation<NV> relation); + protected abstract P computeProjection(DBIDRef id, DistanceDBIDResult<D> neighbors, Relation<NV> relation); /** * Factory class diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/subspaceproj/FourCSubspaceIndex.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/subspaceproj/FourCSubspaceIndex.java index 83a9469c..e61b9144 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/subspaceproj/FourCSubspaceIndex.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/subspaceproj/FourCSubspaceIndex.java @@ -24,12 +24,12 @@ package de.lmu.ifi.dbs.elki.index.preprocessed.subspaceproj; */ import java.util.ArrayList; -import java.util.List; import de.lmu.ifi.dbs.elki.data.NumberVector; -import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; import de.lmu.ifi.dbs.elki.database.ids.ModifiableDBIDs; +import de.lmu.ifi.dbs.elki.database.query.DistanceDBIDResult; import de.lmu.ifi.dbs.elki.database.query.DistanceResultPair; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction; @@ -93,7 +93,7 @@ public class FourCSubspaceIndex<V extends NumberVector<V, ?>, D extends Distance } @Override - protected PCAFilteredResult computeProjection(DBID id, List<DistanceResultPair<D>> neighbors, Relation<V> database) { + protected PCAFilteredResult computeProjection(DBIDRef id, DistanceDBIDResult<D> neighbors, Relation<V> database) { ModifiableDBIDs ids = DBIDUtil.newArray(neighbors.size()); for(DistanceResultPair<D> neighbor : neighbors) { ids.add(neighbor.getDBID()); diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/subspaceproj/PreDeConSubspaceIndex.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/subspaceproj/PreDeConSubspaceIndex.java index 1e83ae80..34bfb5e9 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/subspaceproj/PreDeConSubspaceIndex.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/subspaceproj/PreDeConSubspaceIndex.java @@ -23,10 +23,9 @@ package de.lmu.ifi.dbs.elki.index.preprocessed.subspaceproj; along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import java.util.List; - import de.lmu.ifi.dbs.elki.data.NumberVector; -import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; +import de.lmu.ifi.dbs.elki.database.query.DistanceDBIDResult; import de.lmu.ifi.dbs.elki.database.query.DistanceResultPair; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction; @@ -87,7 +86,7 @@ public class PreDeConSubspaceIndex<V extends NumberVector<? extends V, ?>, D ext } @Override - protected SubspaceProjectionResult computeProjection(DBID id, List<DistanceResultPair<D>> neighbors, Relation<V> database) { + protected SubspaceProjectionResult computeProjection(DBIDRef id, DistanceDBIDResult<D> neighbors, Relation<V> database) { StringBuffer msg = null; int referenceSetSize = neighbors.size(); diff --git a/src/de/lmu/ifi/dbs/elki/index/preprocessed/subspaceproj/SubspaceProjectionIndex.java b/src/de/lmu/ifi/dbs/elki/index/preprocessed/subspaceproj/SubspaceProjectionIndex.java index d5070986..210db8f6 100644 --- a/src/de/lmu/ifi/dbs/elki/index/preprocessed/subspaceproj/SubspaceProjectionIndex.java +++ b/src/de/lmu/ifi/dbs/elki/index/preprocessed/subspaceproj/SubspaceProjectionIndex.java @@ -24,7 +24,7 @@ package de.lmu.ifi.dbs.elki.index.preprocessed.subspaceproj; */ import de.lmu.ifi.dbs.elki.data.NumberVector; -import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.index.preprocessed.LocalProjectionIndex; import de.lmu.ifi.dbs.elki.math.linearalgebra.ProjectionResult; @@ -46,7 +46,7 @@ public interface SubspaceProjectionIndex<NV extends NumberVector<?, ?>, P extend * @return Matrix */ @Override - public P getLocalProjection(DBID objid); + public P getLocalProjection(DBIDRef objid); /** * Factory interface |