1.首先了解下什麼是布隆過濾器,它實際上是乙個很長的二進位制向量和一系列隨機對映函式。
如果想要判斷乙個元素是不是在乙個集合裡,一般想到的是將所有元素儲存起來,然後通過比較確定。鍊錶,樹等等資料結構都是這種思路. 但是隨著集合中元素的增加,我們需要的儲存空間越來越大,檢索速度也越來越慢(o(n),o(logn))。
2.不過世界上還有一種叫作雜湊表(又叫雜湊表,hash table)的資料結構。它可以通過乙個hash函式將乙個元素對映成乙個位陣列(bit array)中的乙個點。這樣一來,我們只要看看這個點是不是1就可以知道集合中有沒有它了,這就是布隆過濾器的基本思想。
3.而布隆過濾器正是通過多個不同雜湊函式演算法將乙個數對映到位陣列的多個點上,由多個點表示乙個數。但布隆過濾器卻無法保證乙個數絕對存在,因為有可能某個數字將乙個點置為1,而在檢測目標值發現這個點恰巧為1,這就會造成誤判。因此,布隆過濾器只能作為近似演算法。
4.但它的優勢是可以準確判定乙個數不存在。因為通過一種雜湊演算法得出該點為0,那就可以肯定這個數一定不在表中。且布隆過濾器不需要儲存元素本身,在某些對保密要求非常嚴格的場合有優勢。
例題1:近似演算法給兩個檔案,分別有100億個query,我們只有1g記憶體,如何找到兩個檔案交集?分別給出精確演算法
和近似演算法
100億個query,先將乙個檔案100億的query,使用布隆過濾器通過多個雜湊演算法對映,然後用另乙個檔案通過同樣的多個雜湊演算法進行比較,即可找到交集。
精確演算法
兩個檔案,都分成1000份。怎麼分呢?將query轉換成整型然後對1000求模運算,這樣100億個query就分到了1000個檔案,每個檔案內用點陣圖儲存,並對這1000個檔案編號,用編號相同的檔案進行比較,找出交集。
例題2:布隆過濾器的刪除和計數差不多類似,需要將它該進成用兩多個bit表示乙個雜湊演算法的結果。和點陣圖key-value模型一樣,存出一次,value加一次,刪除就讓value減一次。00表示0次,01一次,10兩次,11三次,如果多的話就需要增加bit位表示。如何擴充套件bloomfilter使得它支援刪除元素的操作,如何擴充套件bloomfilter使得它支援計數操作
這篇部落格其實理解起來有點繞,不懂的童鞋歡迎提問。
雜湊變形 布隆過濾器
細想我們這裡使用了兩個雜湊函式,那麼自然會有兩個雜湊位址。可想而知,到我們有多個字串的時候,就有可能算出的雜湊位址中有乙個或者兩個與別的字串的雜湊位址相同,如果我們想要刪除乙個資料是,必須同時將這兩個雜湊位址置為0才算是刪除了這個資料,然而當雜湊位址與別的字串的雜湊位址重複的時候,如果將相應位置為0...
布隆過濾器
布隆過濾器 bloom filter 是1970年由布隆提出的。它實際上是乙個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索乙個元素是否在乙個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。如果想要判斷乙個元素是不是在乙個集合裡,一般想到...
布隆過濾器
布隆過濾器的概念 如果想要判斷乙個元素是不是在乙個集合裡,一般想到的是將所有元素儲存起來,然後通過比較確定。鍊錶,樹等等資料結構都是這種思路.但是隨著集合中元素的增加,我們需要的儲存空間越來越大,檢索速度也越來越慢 o n o logn 不過世界上還有一種叫作雜湊表 又叫 雜湊表,hash tabl...