@Override public MaterializeKNNAndRKNNPreprocessor<O> instantiate(Relation<O> relation) { MaterializeKNNAndRKNNPreprocessor<O> instance = new MaterializeKNNAndRKNNPreprocessor<>(relation, distanceFunction, k); return instance; }
@Override protected void objectsInserted(DBIDs ids) { StepProgress stepprog = getLogger().isVerbose() ? new StepProgress(3) : null; ArrayDBIDs aids = DBIDUtil.ensureArray(ids); // materialize the new kNNs and RkNNs getLogger().beginStep(stepprog, 1, "New insertions ocurred, materialize their new kNNs and RkNNs."); materializeKNNAndRKNNs(aids, null); // update the old kNNs and RkNNs getLogger().beginStep(stepprog, 2, "New insertions ocurred, update the affected kNNs and RkNNs."); ArrayDBIDs rkNN_ids = updateKNNsAndRkNNs(ids); // inform listener getLogger().beginStep(stepprog, 3, "New insertions ocurred, inform listeners."); fireKNNsInserted(ids, rkNN_ids); getLogger().ensureCompleted(stepprog); }
stepprog.beginStep(1, "Materializing neighborhood w.r.t. reference neighborhood distance function.", LOG); MaterializeKNNAndRKNNPreprocessor<O> preproc = new MaterializeKNNAndRKNNPreprocessor<>(relation, referenceDistanceFunction, krefer); kNNRefer = preproc.getKNNQuery(drefQ, krefer, DatabaseQuery.HINT_HEAVY_USE); rkNNRefer = preproc.getRKNNQuery(drefQ, krefer, DatabaseQuery.HINT_HEAVY_USE); config.addParameter(AbstractMaterializeKNNPreprocessor.Factory.DISTANCE_FUNCTION_ID, reachabilityDistanceFunction); config.addParameter(AbstractMaterializeKNNPreprocessor.Factory.K_ID, kreach); MaterializeKNNAndRKNNPreprocessor<O> preproc = new MaterializeKNNAndRKNNPreprocessor<>(relation, reachabilityDistanceFunction, kreach); kNNReach = preproc.getKNNQuery(dreachQ, kreach, DatabaseQuery.HINT_HEAVY_USE); rkNNReach = preproc.getRKNNQuery(dreachQ, kreach, DatabaseQuery.HINT_HEAVY_USE);
@Override protected void preprocess() { createStorage(); materialized_RkNN = DataStoreUtil.makeStorage(relation.getDBIDs(), DataStoreFactory.HINT_HOT, TreeSet.class); FiniteProgress progress = getLogger().isVerbose() ? new FiniteProgress("Materializing k nearest neighbors and reverse k nearest neighbors (k=" + k + ")", relation.size(), getLogger()) : null; materializeKNNAndRKNNs(DBIDUtil.ensureArray(relation.getDBIDs()), progress); }
@Override protected void objectsRemoved(DBIDs ids) { StepProgress stepprog = getLogger().isVerbose() ? new StepProgress(3) : null; getLogger().beginStep(stepprog, 1, "New deletions ocurred, remove their materialized kNNs and RkNNs."); ArrayDBIDs kNN_ids = affectedkNN(kNNs, aids); ArrayDBIDs rkNN_ids = affectedRkNN(rkNNs, aids); getLogger().beginStep(stepprog, 2, "New deletions ocurred, update the affected kNNs and RkNNs."); storage.put(reknn, kNNList.get(i)); for(DoubleDBIDListIter it = kNNList.get(i).iter(); it.valid(); it.advance()) { materialized_RkNN.get(it).add(makePair(it, reknn)); getLogger().beginStep(stepprog, 3, "New deletions ocurred, inform listeners."); fireKNNsRemoved(ids, rkNN_ids); getLogger().ensureCompleted(stepprog);
@Override protected void objectsInserted(DBIDs ids) { StepProgress stepprog = LOG.isVerbose() ? new StepProgress(3) : null; ArrayDBIDs aids = DBIDUtil.ensureArray(ids); // materialize the new kNNs and RkNNs LOG.beginStep(stepprog, 1, "New insertions ocurred, materialize their new kNNs and RkNNs."); materializeKNNAndRKNNs(aids, null); // update the old kNNs and RkNNs LOG.beginStep(stepprog, 2, "New insertions ocurred, update the affected kNNs and RkNNs."); ArrayDBIDs rkNN_ids = updateKNNsAndRkNNs(ids); // inform listener LOG.beginStep(stepprog, 3, "New insertions ocurred, inform listeners."); fireKNNsInserted(ids, rkNN_ids); LOG.ensureCompleted(stepprog); }
ArrayDBIDs kNN_ids = affectedkNN(kNNs, aids); ArrayDBIDs rkNN_ids = affectedRkNN(rkNNs, aids); fireKNNsRemoved(ids, rkNN_ids);
KNNQuery<DoubleVector> preproc_knn_query = preproc.getKNNQuery(distanceQuery, k); RKNNQuery<DoubleVector> preproc_rknn_query = preproc.getRKNNQuery(distanceQuery);
/** * Materializes the kNNs and RkNNs of the specified object IDs. * * @param ids the IDs of the objects */ private void materializeKNNAndRKNNs(ArrayDBIDs ids, FiniteProgress progress) { // add an empty list to each rknn for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) { if(materialized_RkNN.get(iter) == null) { materialized_RkNN.put(iter, new TreeSet<DoubleDBIDPair>()); } } // knn query List<? extends KNNList> kNNList = knnQuery.getKNNForBulkDBIDs(ids, k); int i = 0; for(DBIDIter id = ids.iter(); id.valid(); id.advance(), i++) { KNNList kNNs = kNNList.get(i); storage.put(id, kNNs); for(DoubleDBIDListIter iter = kNNs.iter(); iter.valid(); iter.advance()) { TreeSet<DoubleDBIDPair> rknns = materialized_RkNN.get(iter); rknns.add(makePair(iter, id)); } getLogger().incrementProcessed(progress); } getLogger().ensureCompleted(progress); }
stepprog.beginStep(1, "Materializing neighborhood w.r.t. reference neighborhood distance function.", LOG); MaterializeKNNAndRKNNPreprocessor<O> preproc = new MaterializeKNNAndRKNNPreprocessor<>(relation, referenceDistanceFunction, krefer); kNNRefer = preproc.getKNNQuery(drefQ, krefer, DatabaseQuery.HINT_HEAVY_USE); rkNNRefer = preproc.getRKNNQuery(drefQ, krefer, DatabaseQuery.HINT_HEAVY_USE); config.addParameter(AbstractMaterializeKNNPreprocessor.Factory.DISTANCE_FUNCTION_ID, reachabilityDistanceFunction); config.addParameter(AbstractMaterializeKNNPreprocessor.Factory.K_ID, kreach); MaterializeKNNAndRKNNPreprocessor<O> preproc = new MaterializeKNNAndRKNNPreprocessor<>(relation, reachabilityDistanceFunction, kreach); kNNReach = preproc.getKNNQuery(dreachQ, kreach, DatabaseQuery.HINT_HEAVY_USE); rkNNReach = preproc.getRKNNQuery(dreachQ, kreach, DatabaseQuery.HINT_HEAVY_USE);
@Override protected void preprocess() { createStorage(); materialized_RkNN = DataStoreUtil.makeStorage(relation.getDBIDs(), DataStoreFactory.HINT_HOT, TreeSet.class); FiniteProgress progress = LOG.isVerbose() ? new FiniteProgress("Materializing k nearest neighbors and reverse k nearest neighbors (k=" + k + ")", relation.size(), getLogger()) : null; materializeKNNAndRKNNs(DBIDUtil.ensureArray(relation.getDBIDs()), progress); }
@Override protected void objectsInserted(DBIDs ids) { StepProgress stepprog = LOG.isVerbose() ? new StepProgress(3) : null; ArrayDBIDs aids = DBIDUtil.ensureArray(ids); // materialize the new kNNs and RkNNs LOG.beginStep(stepprog, 1, "New insertions ocurred, materialize their new kNNs and RkNNs."); materializeKNNAndRKNNs(aids, null); // update the old kNNs and RkNNs LOG.beginStep(stepprog, 2, "New insertions ocurred, update the affected kNNs and RkNNs."); ArrayDBIDs rkNN_ids = updateKNNsAndRkNNs(ids); // inform listener LOG.beginStep(stepprog, 3, "New insertions ocurred, inform listeners."); fireKNNsInserted(ids, rkNN_ids); LOG.ensureCompleted(stepprog); }
ArrayDBIDs kNN_ids = affectedkNN(kNNs, aids); ArrayDBIDs rkNN_ids = affectedRkNN(rkNNs, aids); fireKNNsRemoved(ids, rkNN_ids);
stepprog.beginStep(1, "Materializing neighborhood w.r.t. reference neighborhood distance function.", LOG); MaterializeKNNAndRKNNPreprocessor<O> preproc = new MaterializeKNNAndRKNNPreprocessor<>(relation, referenceDistanceFunction, krefer); kNNRefer = preproc.getKNNQuery(drefQ, krefer, DatabaseQuery.HINT_HEAVY_USE); rkNNRefer = preproc.getRKNNQuery(drefQ, krefer, DatabaseQuery.HINT_HEAVY_USE); config.addParameter(AbstractMaterializeKNNPreprocessor.Factory.DISTANCE_FUNCTION_ID, reachabilityDistanceFunction); config.addParameter(AbstractMaterializeKNNPreprocessor.Factory.K_ID, kreach); MaterializeKNNAndRKNNPreprocessor<O> preproc = new MaterializeKNNAndRKNNPreprocessor<>(relation, reachabilityDistanceFunction, kreach); kNNReach = preproc.getKNNQuery(dreachQ, kreach, DatabaseQuery.HINT_HEAVY_USE); rkNNReach = preproc.getRKNNQuery(dreachQ, kreach, DatabaseQuery.HINT_HEAVY_USE);
@Override protected void preprocess() { createStorage(); materialized_RkNN = DataStoreUtil.makeStorage(relation.getDBIDs(), DataStoreFactory.HINT_HOT, TreeSet.class); FiniteProgress progress = LOG.isVerbose() ? new FiniteProgress("Materializing k nearest neighbors and reverse k nearest neighbors (k=" + k + ")", relation.size(), getLogger()) : null; materializeKNNAndRKNNs(DBIDUtil.ensureArray(relation.getDBIDs()), progress); }
@Override public MaterializeKNNAndRKNNPreprocessor<O> instantiate(Relation<O> relation) { MaterializeKNNAndRKNNPreprocessor<O> instance = new MaterializeKNNAndRKNNPreprocessor<>(relation, distanceFunction, k); return instance; }
@Override public MaterializeKNNAndRKNNPreprocessor<O> instantiate(Relation<O> relation) { MaterializeKNNAndRKNNPreprocessor<O> instance = new MaterializeKNNAndRKNNPreprocessor<>(relation, distanceFunction, k); return instance; }