/** * Refine a range query. * * @param neighc Original result * @param adjustedEps New epsilon * @return refined list */ private DoubleDBIDList refineRange(DoubleDBIDList neighc, double adjustedEps) { ModifiableDoubleDBIDList n = DBIDUtil.newDistanceDBIDList(neighc.size()); // We don't have a guarantee for this list to be sorted for (DoubleDBIDListIter neighbor = neighc.iter(); neighbor.valid(); neighbor.advance()) { DoubleDBIDPair p = neighbor.getPair(); double dist = p.doubleValue(); if (dist <= adjustedEps) { n.add(dist, p); } } return n; }
/** * Refine neighbors within a subset. * * @param neighc Neighbor candidates * @param dbid Query object * @param df distance function * @param adjustedEps Epsilon range * @param kernel Kernel * @return Neighbors of neighbor object */ private DoubleDBIDList subsetNeighborhoodQuery( DoubleDBIDList neighc, DBIDRef dbid, PrimitiveDistanceFunction<? super V> df, double adjustedEps, KernelDensityEstimator kernel) { ModifiableDoubleDBIDList n = DBIDUtil.newDistanceDBIDList(neighc.size()); V query = kernel.relation.get(dbid); for (DoubleDBIDListIter neighbor = neighc.iter(); neighbor.valid(); neighbor.advance()) { DoubleDBIDPair p = neighbor.getPair(); double dist = df.distance(query, kernel.relation.get(p)); if (dist <= adjustedEps) { n.add(dist, p); } } return n; }