/** * Return the last node whose centroid is less than <code>centroid</code>. */ @SuppressWarnings("WeakerAccess") public int floor(double centroid) { int floor = IntAVLTree.NIL; for (int node = tree.root(); node != IntAVLTree.NIL; ) { final int cmp = Double.compare(centroid, mean(node)); if (cmp <= 0) { node = tree.left(node); } else { floor = node; node = tree.right(node); } } return floor; }
return 2 * values.mean(currentNode) - min; return 2 * values.mean(values.last()) - max; return weightedAverage(min, weightSoFar - index, values.mean(currentNode), index - 1); if (currentWeight == 1) { if (index < weightSoFar + 0.5) { return values.mean(currentNode); } else { leftExclusion = 0.5; return values.mean(nextNode); } else { rightExclusion = 0.5; return weightedAverage(values.mean(currentNode), w2, values.mean(nextNode), w1); return weightedAverage(values.mean(currentNode), w2, max, w1);
@Override public Centroid next() { final Centroid next = new Centroid(mean(nextNode), count(nextNode)); final List<Double> data = data(nextNode); if (data != null) { for (Double x : data) { next.insertData(x); } } nextNode = tree.next(nextNode); return next; }
int lastNeighbor = IntAVLTree.NIL; for (int neighbor = start; neighbor != IntAVLTree.NIL; neighbor = summary.next(neighbor)) { double z = Math.abs(summary.mean(neighbor) - x); if (z < minDistance) { start = neighbor; double n = 0; for (int neighbor = start; neighbor != lastNeighbor; neighbor = summary.next(neighbor)) { assert minDistance == Math.abs(summary.mean(neighbor) - x); double q0 = (double) summary.headSum(neighbor) / count; double q1 = q0 + (double) summary.count(neighbor) / count; double centroid = summary.mean(closest); int count = summary.count(closest); List<Double> d = summary.data(closest);
return Double.NaN; } else if (values.size() == 1) { if (x < values.mean(values.first())) return 0; else if (x > values.mean(values.first())) return 1; else return 0.5; } else { double firstMean = values.mean(first); if (x > min && x < firstMean) { return interpolateTail(values, x, first, firstMean, min); double lastMean = values.mean(last); if (x < max && x > lastMean) { return 1 - interpolateTail(values, x, last, lastMean, max);
/** * Return the last node whose centroid is less than <code>centroid</code>. */ public int floor(double centroid) { int floor = IntAVLTree.NIL; for (int node = tree.root(); node != IntAVLTree.NIL; ) { final int cmp = Double.compare(centroid, mean(node)); if (cmp <= 0) { node = tree.left(node); } else { floor = node; node = tree.right(node); } } return floor; }
final int prev = values.prev(next); if (prev != IntAVLTree.NIL) { previousMean = values.mean(prev); previousIndex = total - (values.count(prev) + 1.0) / 2; return values.mean(next); previousMean = (nextIndex2 * values.mean(next) - nextIndex * values.mean(next2)) / (nextIndex2 - nextIndex); return quantile(previousIndex, index, nextIndex, previousMean, values.mean(next)); } else if (values.next(next) == IntAVLTree.NIL) { final double nextMean2 = (values.mean(next) * (nextIndex2 - previousIndex) - previousMean * (nextIndex2 - nextIndex)) / (nextIndex - previousIndex); return quantile(nextIndex, index, nextIndex2, values.mean(next), nextMean2); previousMean = values.mean(next); previousIndex = nextIndex; next = values.next(next);
@Override public Centroid next() { final Centroid next = new Centroid(mean(nextNode), count(nextNode)); final List<Double> data = data(nextNode); if (data != null) { for (Double x : data) { next.insertData(x); } } nextNode = tree.next(nextNode); return next; }
int lastNeighbor = IntAVLTree.NIL; for (int neighbor = start; neighbor != IntAVLTree.NIL; neighbor = summary.next(neighbor)) { double z = Math.abs(summary.mean(neighbor) - x); if (z < minDistance) { start = neighbor; double n = 0; for (int neighbor = start; neighbor != lastNeighbor; neighbor = summary.next(neighbor)) { assert minDistance == Math.abs(summary.mean(neighbor) - x); double q = count == 1 ? 0.5 : (sum + (summary.count(neighbor) - 1) / 2.0) / (count - 1); double k = 4 * count * q * (1 - q) / compression; double centroid = summary.mean(closest); int count = summary.count(closest); List<Double> d = summary.data(closest);
@Override public void compress() { if (summary.size() <= 1) { return; } AVLGroupTree centroids = summary; this.summary = new AVLGroupTree(recordAllData); final int[] nodes = new int[centroids.size()]; nodes[0] = centroids.first(); for (int i = 1; i < nodes.length; ++i) { nodes[i] = centroids.next(nodes[i-1]); assert nodes[i] != IntAVLTree.NIL; } assert centroids.next(nodes[nodes.length - 1]) == IntAVLTree.NIL; for (int i = centroids.size() - 1; i > 0; --i) { final int other = gen.nextInt(i + 1); final int tmp = nodes[other]; nodes[other] = nodes[i]; nodes[i] = tmp; } for (int node : nodes) { add(centroids.mean(node), centroids.count(node), centroids.data(node)); } }
return Double.NaN; } else if (values.size() == 1) { return x < values.mean(values.first()) ? 0 : 1; } else { double r = 0;