Libraryless. Click here for Pure Java version (3074L/18K).
// 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<Double, ?> map, IVF1<Double> 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)); } }
download show line numbers debug dex old transpilations
Travelled to 3 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx
No comments. add comment
| Snippet ID: | #1031997 | 
| Snippet name: | ProbabilisticDistanceBasedLookup | 
| Eternal ID of this version: | #1031997/9 | 
| Text MD5: | 6cd9e6b9544dbe4a6f0451844cae2240 | 
| Transpilation MD5: | f9bc8adde7ee3480e63ce4db4c90b893 | 
| Author: | stefan | 
| Category: | javax / probabilistic computing | 
| Type: | JavaX fragment (include) | 
| Public (visible to everyone): | Yes | 
| Archived (hidden from active list): | No | 
| Created/modified: | 2021-08-11 02:07:02 | 
| Source code size: | 1550 bytes / 47 lines | 
| Pitched / IR pitched: | No / No | 
| Views / Downloads: | 408 / 617 | 
| Version history: | 8 change(s) | 
| Referenced in: | [show references] |