Bloom Filter模拟代码实现
时间: 2023-09-17 12:12:46 浏览: 96
以下是Bloom Filter的简单模拟代码实现,使用Python语言编写:
```python
import mmh3
from bitarray import bitarray
class BloomFilter:
def __init__(self, size, num_hashes):
self.size = size
self.num_hashes = num_hashes
self.bit_array = bitarray(size)
self.bit_array.setall(0)
def hash(self, data):
hashes = []
for seed in range(self.num_hashes):
hashes.append(mmh3.hash(data, seed) % self.size)
return hashes
def add(self, data):
for h in self.hash(data):
self.bit_array[h] = 1
def lookup(self, data):
for h in self.hash(data):
if not self.bit_array[h]:
return False
return True
```
使用方法:
```python
bf = BloomFilter(1000, 3) # 创建一个大小为1000,使用3个哈希函数的 Bloom Filter
bf.add("hello") # 添加元素
bf.add("world")
print(bf.lookup("hello")) # 查找元素,返回True
print(bf.lookup("python")) # 查找元素,返回False
```
其中,mmh3是一个Python库,用于计算哈希值;bitarray也是一个Python库,用于表示二进制位数组。在构造函数中,我们创建了一个指定大小和哈希函数数量的bitarray,并将所有位初始化为0。在添加元素时,我们将其哈希值对应的位设置为1。在查找元素时,我们检查其哈希值对应的位是否都为1,如果有任何一个位为0,则说明该元素一定没有被添加到Bloom Filter中。
阅读全文