布隆過濾器

2022-06-12 01:15:10 字數 1859 閱讀 3356

優勢/劣勢

刪除在布隆過濾器的值

**實現

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 是一種空間效率很高的隨機...