布隆過濾器

2021-08-22 13:17:42 字數 695 閱讀 8526

昨天做演算法題看到的,以前聽都沒聽過,布隆?扛著門板的那個?哈哈。

布隆過濾器常用來做大資料量的篩選工作,就是從很大的資料集合中判斷一條資料是否屬於該集合。如果該集合資料量夠小我們一般採用資料結構把這些資料都存起來,然後來一條資料我們就去集合中查詢是否有這條資料;但是當資料量達到一定程度時,比如幾個g的資料量你再這樣存怕是要把記憶體撐爆喲,這個時候就可以採用布隆過濾器,前提是這種過濾允許少量誤差。

布隆過濾器的原理是採用多個hash演算法算出多個特徵值,將特徵值存在乙個資料結構中(需要根據指定大小取模),然後來一條資料就算一次這條資料的特徵值,只要有乙個特徵值在這個資料結構中沒有,就說明這條資料不在這個過濾集合中,反之只要特徵值全都在這個資料結構中則表示可能在這個集合中。

舉例:1萬個人名中是不是有某個名字,如果全詞匹配需要存1萬個名字,所以:

1.把每個人名字拆成單個漢字(hash演算法算特徵值),

2.結果還是太多,我沒那麼大空間,我就想了個辦法再分類,比如根據漢字首字母或者根據單個漢字全拼(根據指定範圍大小取模,才能存到指定範圍),

3.然後去找你名字的每個字是不是都存在,有乙個字不存在說明名字肯定不在這1萬個名字裡面,否則就認為在(實際可能不在,比如張三的名字可能因為張五和李三的原因被誤判)

布隆過濾器存在著誤差,影響誤差大小的因素:1.hash演算法的穩定性(影響特徵值的重複率),2.存特徵值指定範圍的大小(特徵值算出來分布很廣,需要根據特徵值指定範圍取模)

布隆過濾器

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

布隆過濾器

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

布隆過濾器

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