Bloom Filter
This JavaScript bloom filter implementation uses the non-cryptographic
Fowler–Noll–Vo hash function for speed.
Usage
const bloom = new BloomFilter(
32 * 256,
16
);
bloom.add("foo");
bloom.add("bar");
bloom.test("foo");
bloom.test("bar");
bloom.test("blah");
const array = [].slice.call(bloom.buckets);
const json = JSON.stringify(array);
const bloom = new BloomFilter(array, 16);
const bloom = BloomFilter.withTargetError(1_000_000, 1e-6);
Implementation
Although the bloom filter requires k hash functions, we can simulate this
using enhanced double hashing with a single 64-bit FNV-1a hash computation for
performance. The 64-bit hash is split into two 32-bit halves to obtain the two
independent hash functions required for enhanced double hashing.
Thanks to Will Fitzgerald for his help and inspiration with the hashing
optimisation.