thanks for the post, it inspired this naive code:
class BloomFilter:
def __init__(self, size):
self.f = [0] * size
def contains(self, s):
h1, h2, h3 = self.hashes(s)
if self.f[h1] * self.f[h2] * self.f[h3] == 1:
return 'Value might be in the set.'
else:
return 'Value is definitely not in the set.'
def hashes(self, s):
h1 = hash(s) % len(self.f)
h2 = hash(s + 'salt') % len(self.f)
h3 = hash(s + 'more salt') % len(self.f)
return h1, h2, h3
def insert(self, s):
h1, h2, h3 = self.hashes(s)
self.f[h1] = self.f[h2] = self.f[h3] = 1
bf = BloomFilter(64)
bf.insert('bill')
print(f"{bf.contains('bill') = }")
print(f"{bf.contains('bob') = }")
Out:
bf.contains('bill') = 'Value might be in the set.'
bf.contains('bob') = 'Value is definitely not in the set.'