-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbloom.py
More file actions
executable file
·30 lines (23 loc) · 812 Bytes
/
bloom.py
File metadata and controls
executable file
·30 lines (23 loc) · 812 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/env python3
import random
class BloomFilter:
def __init__(self, size, hashes = 7):
self.random = random.Random()
self.data = [False] * size
self.size = size
self.hashes = hashes
def add(self, item):
self.random.seed(hash(item))
for i in range(self.hashes):
self.data[self.random.randint(0, self.size - 1)] = True
def contains(self, item):
self.random.seed(hash(item))
for i in range(self.hashes):
if not self.data[self.random.randint(0, self.size - 1)]:
return False
return True
bloom = BloomFilter(10000)
for i in range(1000):
bloom.add(i)
print(sum(1 for i in range(1000) if bloom.contains(i)))
print(sum(1 for i in range(1000, 2000) if bloom.contains(i)))