Bloom Filter Probabilistic Membership (Go)
Implement a Go bloom filter with k hash functions for probabilistic membership testing.
Code
package main
import "hash/fnv"
type BloomFilter struct {
bits []byte
size int
k int
}
func newBloom(size, k int) *BloomFilter { return &BloomFilter{bits: make([]byte, size), size: size, k: k} }
func (bf *BloomFilter) hash(item string, seed int) int {
h := fnv.New32a()
h.Write([]byte{byte(seed)})
h.Write([]byte(item))
return int(h.Sum32()) % bf.size
}
func (bf *BloomFilter) Add(item string) { for i := 0; i < bf.k; i++ { bf.bits[bf.hash(item, i+1)] = 1 } }
func (bf *BloomFilter) Contains(item string) bool { for i := 0; i < bf.k; i++ { if bf.bits[bf.hash(item, i+1)] == 0 { return false } }; return true }Report a problem with this exampleOpens a pre-filled issue on GitHub.