Bloom Filter演算法及應用

來源:互聯網
上載者:User

1. 引言
問題:有1000瓶藥,但是其中有一瓶是有毒的,小白鼠吃了24小時後就會死掉,請問,在24小時找出有毒的藥物,最少需要多少只小白鼠?
答案是:10隻,一隻小白鼠可以表示2種狀態,2^10可以表示1024種狀態
分析可參考:http://lzj0470.iteye.com/blog/657579
通過二進位向量組來擴充描述的狀態,Bloom Filter(BF)演算法也是利用這個思想,其本質是上是一個很長的二進位向量和一系列隨機映射函數

2. 概述
問題:快速判斷一個元素是否在一個集合中
解決方案:一般來說,我們會用HASH表來儲存集合中的資料,好處是快速準確,缺點是儲存效率低,在海量資料時一般伺服器無法儲存。
BF是針對雜湊表儲存效率低的問題,而衍生出來的一種演算法。
其通過利用位元組來描述一個集合,來判斷一個元素是否屬於這個集合
優點是:快速尋找,並具有非常高的儲存效率
缺點是:在判斷一個元素是否屬於某個集合時,有可能會把不屬於這個集合的元素誤認為屬於這個集合

3. 演算法描述
BF包含:
1)一個m位的二進位元組,每一位初始化時置為0
2)k個相互獨立的hash函數
演算法:
針對一個n個元素的集合,通過k個hash函數,將集合中的每個元素都映射到二進位元組中,映射到的位置置為1
例如:對任意一個元素x,第i個雜湊函數映射的位置hi(x)就會被置為1
在判斷某個元素P是否在這個集合時,通過對P應用k次hash函數,判斷其對應所有的位置都是1,如果是則認為P是集合中的元素,否則不是。

4. 最優位元組m大小及hash函數個數
在判斷一個元素是否屬於某個集合時,有可能會把不屬於這個集合的元素誤認為屬於這個集合。因此,如何根據輸入元素個數n,確定位元組m的大小及hash函數個數是一個非常重要的問題。
經過一些複雜的證明(可參考相關文檔),可以得到:
1)當hash函數個數k=(ln2)*(m/n)時錯誤率最小
2)在錯誤率不大於E的情況 下,m至少要等於n*lg(1/E)才能表示任意n個元素的集合,但m還應該更大些,因為還要保證bit數組裡至少一半為0,則m應該>=nlg(1/E)*lge 大概就是nlg(1/E)的1.44倍

5. 應用
有10億個url,如何判斷一個新的url是否在這個url的集合中?
一個url平均長度為52,如果用Hash表解決的話,由於Hash表的儲存效率一般只有50%,因此10個url大概需要100G記憶體,一般伺服器無法儲存。
使用BF,要求錯誤率小於萬分之一。
此時,輸入元素n=10億,最大錯誤率E=0.0001
可計算出:m=nlg(1/E)*1.44=57.6億,大概需要7.2億(57.6億/8)個位元組,即720M記憶體。
Hash函數個數:k=(ln2)*(m/n)  大概4個Hash函數

6.總結
BF通過犧牲一定的錯誤率來保證時間和空間(魚與熊掌,不可兼得),目前被廣泛應用于海量資料處理及資料庫系統中。
例如,在Big table和Cassandra中,都使用BF作為索引結構。
P.S 針對BF的錯誤識別問題,可以通過建立白名單的方式解決。

參考文獻:
paper:Network Applications of Bloom Filters: A Survey

http://blog.csdn.net/jiaomeng/article/details/1495500

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.