海量數據處理---布隆過濾器

布隆過濾器的概念和原理

概念:布隆過濾器是一種空間效率較高的數據結構,它利用位數組表示一個集合。可以很容易的判斷一個元素是否屬於這個集合。但是它的這種高效有一定的代價:再判斷一個元素是否屬於這個集合時,有可能將不屬於這個集合的元素誤認爲屬於這個集合,因此,布隆過濾器不適合那些“零錯誤”的場景,而在能忍受低錯誤率的情況下,布隆過濾器通過極少的錯誤率換取存儲空間的極大節省。


實現原理:在初始化時,布隆過濾器是一個包含m位的數組,而且將每一位都置爲0。

爲了表示S={x1,x2,x3,...,xn}這樣n個元素的集合,布隆過濾器使用k個相互獨立的哈希函數,它們分別將集合中的每一個元素映射到{1,2,3,...,m}的範圍內。對於任意一個元素x,第i個哈希函數映射的位置hi(x)就被設置爲1。注意:如果某一位置已經被設置爲1,那麼只有在第一次會起作用。

下圖是一個被hash函數映射的例子:

在判斷一個數字Y是否屬於這個集合時,我們對Y應用k次哈希函數,如果所有的hi(y)的位置都是1,那麼就可以認爲Y是該集合裏面的元素,否則不是該集合裏的元素。

 

由圖可看到y1在映射過程中有1位對應的是0,故y1不在集合內,y2的每一個映射對應的位都是1,故y2在該集合裏面。

錯誤率:設P爲數組中0的概論,則錯誤率爲(1-P)^k。表示一個值每一個應用hash函數後對應位置的值都是1。

哈希函數個數k:如果哈希函數多,那麼對一個不屬於集合的元素進行查詢後得到的0的概論就大。但是如果哈希函數少,那麼位數組中不同數值哈希後落入同一位的概論就大,錯誤率就提高了。(最好保持讓位數組還有一半還空着)K=(ln2)*(m/n);m表示位數組的大小,m位;n表示集合中元素個數。

位數組m的大小:m>=nlg(1/E)*1.44。(lg表示以2爲底的對數,E表示錯誤率。

應用場景:查重、判斷元素是否在一個集合中

總結:

布隆過濾器=位數組+k個哈希函數。

優點:插入和查詢的時間都爲常數

缺點:有錯誤率,刪除一個元素可能會導致其他元素受到影響。

擴展:需要刪除一個元素的話,就用一個整型數組代替位數組,數組下標代表位下標,用count記錄該下標被映射的次數。

參考博客:

https://blog.csdn.net/v_JULY_v/article/details/6685894

 

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