布魯姆過濾器

布隆過濾器是一種數據結構,快速和節省內存,能用於判定一個元素是否存在於一個集合中
這種效率的代價是Bloom filter是一種概率數據結構,元素不是絕對的在組裏或可能在組裏。

Bloom filter的基本數據結構是一個位向量。


                                            圖1:布魯姆過濾器散列圖

如圖1:布魯姆過濾器,由一個長度爲m(=18)的數組(初始值都爲0)和k(=3)個hash 函數組成,圖中的元素x,y,z,判斷爲“可能”存在於集合中;而元素w一定不在集合中。由於元素x,y,z通過k個hash函數計算後,發現對應的桶中的元素都是1。而w計算後在15號桶爲0。

添加元素:將一個元素添加到Bloom Filter中,只需要計算k個hash函數,並將散列的位置都置爲1。(因此多個元素,散列到同一個桶中是有可能的)

刪除元素:對於simple BF由於多個元素,散列到同一個桶中是有可能的,一個桶值爲1不代表這個桶只表示某單個元素的散列信息,可能有其他的元素也散列到這個桶。因此,無法進行刪除操作。(增加一個BF存儲刪除的元素,完成刪除操作)

假陽性率:當m和k足夠大,或者選取的hash函數足夠好的時候,一個元素如果不在集合中,通過hash計算時,得到的值很可能爲0(衝突變小),假陽性率越低。當假陽性率太高,會導致很多無效的讀取磁盤操作,會很浪費時間。因此,當假陽性率太高時,需要重構BF。

時間和空間分析:添加,刪除,查找都爲O(k)。對於m長的BF,有n個元素,k個hash函數。當k值取最優時,對於1%假陽性,每個元素只需要消耗9.6bits。每個元素增加4.8bits可以完全解決1%假陽性問題。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章