Bloom Filter 布隆演算法

2021-06-28 12:03:34 字數 966 閱讀 7866

日常生活中,包括在設計計算機軟體時,我們經常要判斷乙個元素是否在乙個集合中。比如在字處理軟體中,需要檢查乙個英語單詞是否拼寫正確(也就是要判斷它是否在已知的字典中);在 fbi,乙個嫌疑人的名字是否已經在嫌疑名單上;在網路爬蟲裡,乙個**是否被訪問過等等。最直接的方法就是將集合中全部的元素存在計算機中,遇到乙個新元素時,將它和集合中的元素直接比較即可。

布隆過濾器是由巴頓.布隆於一九七零年提出的。它實際上是乙個很長的二進位制向量和一系列隨機對映函式。我們通過上面的例子來說明起工作原理。

假定我們儲存一億個電子郵件位址,我們先建立乙個十六億二進位制(位元),即兩億位元組的向量,然後將這十六億個二進位制位全部設定為零。對於每乙個電子郵件位址 x,我們用八個不同的隨機數產生器(f1,f2, ...,f8) 產生八個資訊指紋(f1, f2, ..., f8)。再用乙個隨機數產生器 g 把這八個資訊指紋對映到 1 到十六億中的八個自然數 g1, g2, ...,g8。現在我們把這八個位置的二進位制位全部設定為一。當我們對這一億個 email 位址都進行這樣的處理後。乙個針對這些 email 位址的布隆過濾器就建成了。(見下圖) 現在,讓我們看看如何用布隆過濾器來檢測乙個可疑的電子郵件位址 y 是否在黑名單中。我們用相同的八個隨機數產生器(f1, f2, ..., f8)對這個位址產生八個資訊指紋 s1,s2,...,s8,然後將這八個指紋對應到布隆過濾器的八個二進位制位,分別是 t1,t2,...,t8。如果 y 在黑名單中,顯然,t1,t2,..,t8 對應的八個二進位制一定是一。這樣在遇到任何在黑名單中的電子郵件位址,我們都能準確地發現。

布隆過濾器決不會漏掉任何乙個在黑名單中的可疑位址。但是,它有一條不足之處。也就是它有極小的可能將乙個不在黑名單中的電子郵件位址判定為在黑名單中,因為有可能某個好的郵件位址正巧對應八個都被設定成一的二進位制位。好在這種可能性很小。我們把它稱為誤識概率。在上面的例子中,誤識概率在萬分之一以下。

布隆過濾器的好處在於快速,省空間。但是有一定的誤識別率。常見的補救辦法是在建立乙個小的白名單,儲存那些可能別誤判的郵件位址。

Bloom filter(布隆過濾器)

問題 在網路爬蟲中,有乙個要考慮的問題,由於網路間的鏈結錯綜複雜,蜘蛛在網路間爬行很可能會形成 環 為了避免形成 環 就需要知道蜘蛛已經訪問過那些url。給乙個url,怎樣知道蜘蛛是否已經訪問過呢?有如下幾種方案 1.將訪問過的url儲存到資料庫。2.用hashset將訪問過的url儲存起來。那只需...

布隆過濾器(Bloom Filter)

1.簡介 布隆過濾器是一種多雜湊函式對映的快速查詢演算法。它可以判斷出某個元素肯定不在集合裡或者可能在集合裡,即它不會漏報,但可能會誤報。通常應用在一些需要快速判斷某個元素是否屬於集合,但不嚴格要求100 正確的場合。2.原理 首先需要k個hash函式,每個函式可以把key雜湊成為1個整數 初始化時...

布隆過濾器(BloomFilter)

名稱 問題解決方法 快取穿透 查詢了乙個不存在的資料 布隆過濾器 快取擊穿 某個key的快取失效 互斥鎖快取雪崩 多個key的快取同時失效 失效時間 隨機時間 底層是乙個bit二進位制向量或叫 bit 陣列,bit 裡存放的資料非0即1。通過雜湊函式將元素對映到bit的相應位置,並將此位置置為1。如...