布隆過濾器

2021-08-28 03:04:33 字數 1204 閱讀 2630

布隆過濾器是大資料領域的乙個常見演算法,它的目的是過濾掉那些不是目標的元素。也就是說如果乙個要搜尋的詞並不存在與我的資料中,那麼它可以以很快的速度返回目標不存在。

class bloomfilter(object):

def __init__(self, size):

self.values = [false] * size

self.size = size

def hash_value(self,value):

return hash(value) % self.size

def add_value(self,value):

h = self.hash_value(value)

self.values[h] = true

def might_contain(self,value):

h = self.hash_value(value)

return self.values[h]

def print_contents(self):

print(self.values)

bf = bloomfilter(100)

bf.add_value('dog')

bf.add_value('fish')

bf.add_value('cat')

bf.add_value('bird')

bf.print_contents()

for term in ['dog','fish','cat','duck','emu','chick','bot0']:

print('{}:{} {}'.format(term,bf.hash_value(term),bf.might_contain(term)))

基本的資料結構是個陣列(實際上是個點陣圖,用1/0來記錄資料是否存在),初始化是沒有任何內容,所以全部置false。實際的使用當中,該陣列的長度是非常大的,以保證效率。

利用雜湊演算法來決定資料應該存在哪一位,也就是陣列的索引

當乙個資料被加入到布隆過濾器的時候,計算它的雜湊值然後把相應的位置為true

當檢查乙個資料是否已經存在或者說被索引過的時候,只要檢查對應的雜湊值所在的位的true/fasle

看到這裡,大家應該可以看出,如果布隆過濾器返回false,那麼資料一定是沒有索引過的,然而如果返回true,那也不能說資料一定就已經被索引過。在搜尋過程中使用布隆過濾器可以使得很多沒有命中的搜尋提前返回來提高效率。

布隆過濾器

布隆過濾器 bloom filter 是1970年由布隆提出的。它實際上是乙個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索乙個元素是否在乙個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。如果想要判斷乙個元素是不是在乙個集合裡,一般想到...

布隆過濾器

布隆過濾器的概念 如果想要判斷乙個元素是不是在乙個集合裡,一般想到的是將所有元素儲存起來,然後通過比較確定。鍊錶,樹等等資料結構都是這種思路.但是隨著集合中元素的增加,我們需要的儲存空間越來越大,檢索速度也越來越慢 o n o logn 不過世界上還有一種叫作雜湊表 又叫 雜湊表,hash tabl...

布隆過濾器

如果想判斷乙個元素是不是在乙個集合裡,一般想到的是將集合中所有元素儲存起來,然後通過比較確定。鍊錶 樹 雜湊表 又叫雜湊表,hash table 等等資料結構都是這種思路。但是隨著集合中元素的增加,我們需要的儲存空間越來越大。同時檢索速度也越來越慢。bloom filter 是一種空間效率很高的隨機...