Warning: session_start(): open(/var/lib/php/sessions/sess_ios59u7n992oqb6fu22se3712f, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
// This object locates a floating-point key in a sorted map.
// Then it calls (probabilistically schedules) an action function
// on keys from the map, starting with the key closest to the
// requested one, then moving further to the left AND to the right
// until (at possibly very low probability) even the keys farthest
// away have been called.
// Probability 1 is used only iff there is an exact match.
// Probabilities fall with increasing distance between
// searched and found key.
srecord noeq ProbabilisticDistanceBasedLookup(
IProbabilisticScheduler scheduler,
NavigableMap map,
IVF1 action,
double key) {
swappable double distanceToProbability(double distance) {
ret genericDistanceToProbability(distance);
}
run {
Double closest = closestDoubleKey(map, key);
if (closest == null) ret;
double p = distanceToProbability(abs(closest-key));
scheduler.at(p, () -> action.get(closest));
scheduler.at(p, () -> walkLeft(closest));
scheduler.at(p, () -> walkRight(closest));
}
void walkLeft(double x) {
Double y = map.lowerKey(x);
if (y == null) ret;
double p = distanceToProbability(abs(y-key));
scheduler.at(p, () -> action.get(y));
scheduler.at(p, () -> walkLeft(y));
}
void walkRight(double x) {
Double y = map.higherKey(x);
if (y == null) ret;
double p = distanceToProbability(abs(y-key));
scheduler.at(p, () -> action.get(y));
scheduler.at(p, () -> walkRight(y));
}
}