布隆過濾器

布隆過濾器是偶然聽到的一個東西瓢谢,名字有點(diǎn)吸引我畸写。于是去作了一番了解。

布隆過濾器與散列表氓扛、鏈表性質(zhì)一樣枯芬,是一種數(shù)據(jù)結(jié)構(gòu)。它的應(yīng)用優(yōu)點(diǎn)在于節(jié)省空間同時(shí)提高查找效率采郎。

這里明確一點(diǎn)是布隆過濾器本身是不存值的千所,所以用它來判斷一個值是否存在列表中是一個非常合適的場景。與此同時(shí)蒜埋,它不能判斷值一定存在列表中淫痰,因?yàn)樗鼤霈F(xiàn)誤判。下面會細(xì)說整份。

布隆過濾器的本質(zhì)是一張位圖(BitMap)待错,如下


位圖

當(dāng)我們用關(guān)鍵字存值時(shí),需要借用一個工具——哈希函數(shù)烈评,哈希函數(shù)在散列表上也有應(yīng)用火俄,這里不談了。

通過哈希函數(shù)讲冠,我們可以對一個關(guān)鍵字(Key)瓜客,算出一個哈希值,這里的哈希值假設(shè)算出上圖的下標(biāo)(1),那么存值的時(shí)候我們的布隆過濾器是這樣表示的:


存值后的位圖

這樣意味著1這個位置存了值谱仪,如果我們需要檢驗(yàn)關(guān)鍵字(Key)是否存在玻熙,那么再次通過散列函數(shù)算出來下標(biāo),如果位圖這個位置標(biāo)記為1芽卿,那么說明這個Key是存在的揭芍。原理就是如此簡單胳搞。

實(shí)際上卸例,布隆過濾器往往會采用多個散列函數(shù)來生成多個下標(biāo),例如3個散列函數(shù)生成3個下標(biāo)(1,5,6)肌毅,那么表達(dá)起來就會是這樣:


3個散列下標(biāo)的位圖

為什么需要多個散列函數(shù)筷转?

其實(shí)是為了提高它準(zhǔn)確率,因?yàn)樯⒘泻瘮?shù)很可能對于不同的Key可能會產(chǎn)生相同的散列值悬而,所以設(shè)置多個散列函數(shù)能讓Key留存率高一點(diǎn)呜舒,比較后面也許會有其它值把它沖掉,比如另外一個KeyOther笨奠,計(jì)算出的散列值(2,5,7)袭蝗。那么存了KeyOther的時(shí)候,位圖就變?yōu)檫@樣了:


存了KeyOther的位圖

可以看出5下標(biāo)被覆蓋掉了般婆,這時(shí)如果你要判斷Key存不存在怎么辦到腥?你算出了(1,5,6),那么如果通過查看(1蔚袍,5乡范,6)的位置都為1的時(shí)候,是不是意味著Key是有可能存在了啤咽。注意晋辆,這里是有可能存在,也是布隆過濾器為什么會出現(xiàn)誤算的原因宇整。

我總結(jié)了兩點(diǎn):

1.布隆過濾器不能算出值的必然存在

2.布隆過濾器能算出值的必定不存在

最后思考

位圖的長度會影響布隆過濾器的長度

哈希函數(shù)的個數(shù)會影響布隆過濾器的誤報(bào)率以及效率

其中的函數(shù)關(guān)系瓶佳,靠自我腦補(bǔ)了。

額外知識

支持刪除的布隆過濾器:Couting Bloom Filter

哈希算法:FNV

以上均為個人見解鳞青,不做任何參考霸饲。

參考資料:維基百科

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市盼玄,隨后出現(xiàn)的幾起案子贴彼,更是在濱河造成了極大的恐慌,老刑警劉巖埃儿,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件器仗,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)精钮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門威鹿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人轨香,你說我怎么就攤上這事忽你。” “怎么了臂容?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵科雳,是天一觀的道長。 經(jīng)常有香客問我脓杉,道長糟秘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任球散,我火速辦了婚禮尿赚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蕉堰。我一直安慰自己凌净,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布屋讶。 她就那樣靜靜地躺著冰寻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丑婿。 梳的紋絲不亂的頭發(fā)上性雄,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機(jī)與錄音羹奉,去河邊找鬼秒旋。 笑死,一個胖子當(dāng)著我的面吹牛诀拭,可吹牛的內(nèi)容都是我干的迁筛。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼耕挨,長吁一口氣:“原來是場噩夢啊……” “哼细卧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起筒占,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤贪庙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后翰苫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體止邮,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡这橙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了导披。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屈扎。...
    茶點(diǎn)故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖撩匕,靈堂內(nèi)的尸體忽然破棺而出鹰晨,到底是詐尸還是另有隱情,我是刑警寧澤止毕,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布模蜡,位于F島的核電站,受9級特大地震影響滓技,放射性物質(zhì)發(fā)生泄漏哩牍。R本人自食惡果不足惜棚潦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一令漂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丸边,春花似錦叠必、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至骄呼,卻和暖如春共苛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蜓萄。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工隅茎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嫉沽。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓辟犀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绸硕。 傳聞我的和親對象是個殘疾皇子堂竟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容