| RollingBloomFilter is a probabilistic “keep
| track of most recently inserted” set.
| Construct it with the number of items to keep
| track of, and a false-positive rate. Unlike
| CBloomFilter, by default nTweak is set to
| a cryptographically secure random value for
| you. Similarly rather than clear() the method
| reset() is provided, which also changes nTweak
| to decrease the impact of false-positives.
|
| contains(item) will always return true if item
| was one of the last N to 1.5*N insert()’ed
| … but may also return true for items that
| were not inserted.
|
| It needs around 1.8 bytes per element per
| factor 0.1 of false positive rate.
|
| For example, if we want 1000 elements, we’d
| need:
|
| - ~1800 bytes for a false positive rate of 0.1
| - ~3600 bytes for a false positive rate of 0.01
| - ~5400 bytes for a false positive rate of 0.001
|
| If we make these simplifying assumptions:
|
| - logFpRate / log(0.5) doesn’t get rounded or
| clamped in the nHashFuncs calculation
|
| - nElements is even, so that
| nEntriesPerGeneration == nElements / 2
|
| Then we get a more accurate estimate for filter
| bytes:
|
| 3/(log(256)*log(2)) * log(1/fpRate) * nElements