優勢/劣勢
刪除在布隆過濾器的值
**實現
from bitarray import bitarray
import mmh3
# 布隆過濾器實現類
class bloomfilter(set):
# 初始化函式,定義向量的長度,和hash的次數
def __init__(self, size, hash_count):
super(bloomfilter, self).__init__()
self.bit_array = bitarray(size)
self.bit_array.setall(0)
self.size = size
self.hash_count = hash_count
def __len__(self):
return self.size
def __iter__(self):
return iter(self.bit_array)
# 新增 資料到 布隆過濾器中
def add(self, item):
for ii in range(self.hash_count):
index = mmh3.hash(item, ii) % self.size
self.bit_array[index] = 1
return self
# 檢查 hash值是否在向量中
def __contains__(self, item):
out = true
for ii in range(self.hash_count):
index = mmh3.hash(item, ii) % self.size
if self.bit_array[index] == 0:
out = false
return out
# 啟動檔案
if __name__ == '__main__':
bloom = bloomfilter(100, 10)
companys = ['sina','tencent','alibaba']
# 將資料新增到布隆過濾器中
for company in companys:
bloom.add(company)
# 檢視你新增的公司是否都已已經新增到布隆過濾器中?
for company in companys:
if company in bloom:
print('{} 已新增'.format(company))
else:
print('{} 有問題'.format(company))
# 檢視其他公司是否也在布隆過濾器裡
print('{} 可能在布隆過濾器裡'.format(other_company))
else:
print('{} 一定不在布隆過濾器裡'.format(other_company))
布隆過濾器
布隆過濾器 bloom filter 是1970年由布隆提出的。它實際上是乙個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索乙個元素是否在乙個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。如果想要判斷乙個元素是不是在乙個集合裡,一般想到...
布隆過濾器
布隆過濾器的概念 如果想要判斷乙個元素是不是在乙個集合裡,一般想到的是將所有元素儲存起來,然後通過比較確定。鍊錶,樹等等資料結構都是這種思路.但是隨著集合中元素的增加,我們需要的儲存空間越來越大,檢索速度也越來越慢 o n o logn 不過世界上還有一種叫作雜湊表 又叫 雜湊表,hash tabl...
布隆過濾器
如果想判斷乙個元素是不是在乙個集合裡,一般想到的是將集合中所有元素儲存起來,然後通過比較確定。鍊錶 樹 雜湊表 又叫雜湊表,hash table 等等資料結構都是這種思路。但是隨著集合中元素的增加,我們需要的儲存空間越來越大。同時檢索速度也越來越慢。bloom filter 是一種空間效率很高的隨機...