python是实现布隆过滤器
时间: 2023-06-29 11:15:39 浏览: 150
是的,Python可以实现布隆过滤器。Python中可以使用bitarray或者bitset库实现布隆过滤器。其中bitarray库需要额外安装,而bitset库是Python标准库的一部分。以下是使用bitset库实现布隆过滤器的示例代码:
```python
import hashlib
from bitarray import bitarray
class BloomFilter:
def __init__(self, m, k):
self.m = m
self.k = k
self.bit_array = bitarray(m)
self.bit_array.setall(0)
def add(self, item):
for i in range(self.k):
digest = hashlib.sha256(str(i).encode() + item.encode()).hexdigest()
index = int(digest, 16) % self.m
self.bit_array[index] = 1
def __contains__(self, item):
for i in range(self.k):
digest = hashlib.sha256(str(i).encode() + item.encode()).hexdigest()
index = int(digest, 16) % self.m
if self.bit_array[index] == 0:
return False
return True
```
在这个示例代码中,我们使用了SHA-256哈希函数来生成k个哈希值,然后将这些哈希值映射到位数组中的k个位置。如果这些位置都为1,则我们认为该元素已经被添加到了布隆过滤器中。如果要添加更多元素,只需要调用add方法即可。要查询一个元素是否存在于布隆过滤器中,只需要将其作为参数传递给`__contains__`方法即可。
阅读全文