/** * Copy constructor. * @param e entry to copy */ public PhEntryDist(PhEntryDist<T> e) { super(e); this.dist = e.dist(); }
private double consolidate(int nMin, double eps, double max) { sortEntries(); double maxDnew = entries.get(nMin-1).dist(); if (maxDnew < max+eps) { //TODO epsilon? max = maxDnew; for (int i2 = nMin; i2 < resultSize; i2++) { //purge if (entries.get(i2).dist() + eps > max) { resultSize = i2; break; } } } return max; }
private double consolidate(int nMin, double eps, double max) { sortEntries(); double maxDnew = entries.get(nMin-1).dist(); if (maxDnew < max+eps) { //TODO epsilon? max = maxDnew; for (int i2 = nMin; i2 < resultSize; i2++) { //purge if (entries.get(i2).dist() + eps > max) { resultSize = i2; break; } } } return max; }
private double consolidate(int nMin, double EPS, double max) { sortEntries(); double maxDnew = entries.get(nMin-1).dist(); if (maxDnew < max+EPS) { //TODO epsilon? max = maxDnew; for (int i2 = nMin; i2 < resultSize; i2++) { //purge if (entries.get(i2).dist() + EPS > max) { resultSize = i2; break; } } } return max; }
/** * Ensure a valid candidate at top of LxQueue. * @param k */ private void validateLxQueue(int k) { //Check with estimated distance. Ensure that there is no candidate in queueEst that may be //closer that the first candidate in queueLx. while (!queueEst.isEmpty() && (queueLx.isEmpty() || queueEst.peek().dist() <= queueLx.peek().dist())) { //move to queueLx PhEntryDist<Object> entry = queueEst.poll(); entry.setDist(calcLxDistance(entry)); queueLx.add( entry ); } }
/** * Ensure a valid candidate at top of LxQueue. * @param k */ private void validateLxQueue(int k) { //Check with estimated distance. Ensure that there is no candidate in queueEst that may be //closer that the first candidate in queueLx. while (!queueEst.isEmpty() && (queueLx.isEmpty() || queueEst.peek().dist() <= queueLx.peek().dist())) { //move to queueLx PhEntryDist<Object> entry = queueEst.poll(); entry.setDist(calcLxDistance(entry)); queueLx.add( entry ); } }
@Override public PhEntryDistF<T> nextEntry() { double[] d = new double[dims]; PhEntryDist<T> e = q.nextEntryReuse(); pre.post(e.getKey(), d); return new PhEntryDistF<>(d, e.getValue(), e.dist()); }
@Override public PhEntryDistSF<T> nextEntry() { double[] lower = new double[dims]; double[] upper = new double[dims]; PhEntryDist<T> pvEntry = q.nextEntryReuse(); pre.post(pvEntry.getKey(), lower, upper); return new PhEntryDistSF<>(lower, upper, pvEntry.getValue(), pvEntry.dist()); } @Override
double currentMin = queueLx.isEmpty() ? Double.POSITIVE_INFINITY : queueLx.peek().dist(); distance.knnCalcDistances(center, candidate.getKey(), node.getPostLen() + 1, distances); if (candidate.dist() <= 0) { PhTreeHelperHD.posInArrayHD(center, node.getPostLen(), relativeQuadrantOfCenter); } else { currentMin = currentMin < newLx.dist() ? currentMin : newLx.dist(); } else { queueEst.add( createEntry(e2.getKdKey(), e2.getValue(), d) );
double currentMin = queueLx.isEmpty() ? Double.POSITIVE_INFINITY : queueLx.peek().dist(); if (candidate.dist() <= 0) { relativeQuadrantOfCenter = PhTreeHelper.posInArray(center, node.getPostLen()); } else { currentMin = currentMin < newLx.dist() ? currentMin : newLx.dist(); } else { queueEst.add( createEntry(e2.getKdKey(), e2.getValue(), d) );
@Override public PhEntryDistF<T> nextEntryReuse() { PhEntryDist<T> e = q.nextEntryReuse(); pre.post(e.getKey(), buffer.getKey()); buffer.set( e.getValue(), e.dist() ); return buffer; }
@Override public PhEntryDistSF<T> nextEntryReuse() { PhEntryDist<T> pvEntry = q.nextEntryReuse(); pre.post(pvEntry.getKey(), buffer.lower(), buffer.upper()); buffer.setValueDist( pvEntry.getValue(), pvEntry.dist() ); return buffer; } @Override
maxDist = entries.get(nMin-1).dist(); checker.set(val, distance, maxDist); distance.toMBB(maxDist, val, mbbMin, mbbMax);
maxDist = entries.get(nMin-1).dist(); checker.set(val, distance, maxDist); distance.toMBB(maxDist, val, mbbMin, mbbMax);
maxDist = entries.get(nMin-1).dist(); checker.set(val, distance, maxDist); distance.toMBB(maxDist, val, mbbMin, mbbMax);