版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Bloom Filter概念和原理焦萌 2007年1月27日 Bloom Filter是一種空間效率很高的隨機(jī)數(shù)據(jù)結(jié)構(gòu),它利用位數(shù)組很簡潔地表示一個集合,并能判斷一個元素是否屬于這個集合。Bloom Filter的這種高效是有一定代價(jià)的:在判斷一個元素是否屬于某個集合時,有可能會把不屬于這個集合的元素誤認(rèn)為屬于這個集合(false positive)。因此,Bloom Filter不適合那些“零錯誤”的應(yīng)用場合。而在能容忍低錯誤率的應(yīng)用場合下,Bloom Filter通過極少的錯誤換取了存儲空間的極大節(jié)省。集合表示和元素查詢下面我們具體來看Bloom Filter是如何用位數(shù)組表示集
2、合的。初始狀態(tài)時,Bloom Filter是一個包含m位的位數(shù)組,每一位都置為0。為了表達(dá)S=x1, x2,xn這樣一個n個元素的集合,Bloom Filter使用k個相互獨(dú)立的哈希函數(shù)(Hash Function),它們分別將集合中的每個元素映射到1,m的范圍中。對任意一個元素x,第i個哈希函數(shù)映射的位置hi(x)就會被置為1(1ik)。注意,如果一個位置多次被置為1,那么只有第一次會起作用,后面幾次將沒有任何效果。在下圖中,k=3,且有兩個哈希函數(shù)選中同一個位置(從左邊數(shù)第五位)。 在判斷y是否屬于這個集合時,我們對y應(yīng)用k次哈希函數(shù),如果所
3、有hi(y)的位置都是1(1ik),那么我們就認(rèn)為y是集合中的元素,否則就認(rèn)為y不是集合中的元素。下圖中y1就不是集合中的元素。y2或者屬于這個集合,或者剛好是一個false positive。錯誤率估計(jì)前面我們已經(jīng)提到了,Bloom Filter在判斷一個元素是否屬于它表示的集合時會有一定的錯誤率(false positive rate),下面我們就來估計(jì)錯誤率的大小。在估計(jì)之前為了簡化模型,我們假設(shè)kn<m且各個哈希函數(shù)是完全隨機(jī)的。當(dāng)集合S=x1, x2,xn的所有元素都被k個哈希函數(shù)映射到m位的位數(shù)組中時,這個位數(shù)組中某一位還是0的概率是:其中1/m表示任意一個哈希函數(shù)選中這一位
4、的概率(前提是哈希函數(shù)是完全隨機(jī)的),(1-1/m)表示哈希一次沒有選中這一位的概率。要把S完全映射到位數(shù)組中,需要做kn次哈希。某一位還是0意味著kn次哈希都沒有選中它,因此這個概率就是(1-1/m)的kn次方。令p = e-kn/m是為了簡化運(yùn)算,這里用到了計(jì)算e時常用的近似: 令為位數(shù)組中0的比例,則的數(shù)學(xué)期望E()= p。在已知的情況下,要求的錯誤率(false positive rate)為:(1-)為位數(shù)組中1的比例,(1-)k就表示k次哈希都剛好選中1的區(qū)域,即false positive rate。上式中第二步近似在前面已經(jīng)提到了,現(xiàn)在來看第一步近似。p只是的數(shù)學(xué)期望
5、,在實(shí)際中的值有可能偏離它的數(shù)學(xué)期望值。M. Mitzenmacher已經(jīng)證明2 ,位數(shù)組中0的比例非常集中地分布在它的數(shù)學(xué)期望值的附近。因此,第一步的近似得以成立。分別將p和p代入上式中,得: 相比p和f,使用p和f通常在分析中更為方便。最優(yōu)的哈希函數(shù)個數(shù)既然Bloom Filter要靠多個哈希函數(shù)將集合映射到位數(shù)組中,那么應(yīng)該選擇幾個哈希函數(shù)才能使元素查詢時的錯誤率降到最低呢?這里有兩個互斥的理由:如果哈希函數(shù)的個數(shù)多,那么在對一個不屬于集合的元素進(jìn)行查詢時得到0的概率就大;但另一方面,如果哈希函數(shù)的個數(shù)少,那么位數(shù)
6、組中的0就多。為了得到最優(yōu)的哈希函數(shù)個數(shù),我們需要根據(jù)上一小節(jié)中的錯誤率公式進(jìn)行計(jì)算。 先用p和f進(jìn)行計(jì)算。注意到f = exp(k ln(1 ekn/m),我們令g = k ln(1 ekn/m),只要讓g取到最小,f自然也取到最小。由于p = e-kn/m,我們可以將g寫成根據(jù)對稱性法則可以很容易看出當(dāng)p = 1/2,也就是k = ln2· (m/n)時,g取得最小值。在這種情況下,最小錯誤率f等于(1/2)k (0.6185)m/n。另外,注意到p是位數(shù)組中某一位仍是0的概率,所以p = 1/2對應(yīng)著位數(shù)組中0和1各一半。換句話說,要想保持錯誤率低,最好讓位數(shù)組有一
7、半還空著。 需要強(qiáng)調(diào)的一點(diǎn)是,p = 1/2時錯誤率最小這個結(jié)果并不依賴于近似值p和f。同樣對于f = exp(k ln(1 (1 1/m)kn),g = k ln(1 (1 1/m)kn),p = (1 1/m)kn,我們可以將g寫成同樣根據(jù)對稱性法則可以得到當(dāng)p = 1/2時,g取得最小值。位數(shù)組的大小下面我們來看看,在不超過一定錯誤率的情況下,Bloom Filter至少需要多少位才能表示全集中任意n個元素的集合。假設(shè)全集中共有u個元素,允許的最大錯誤率為,下面我們來求位數(shù)組的位數(shù)m。 假設(shè)X為全集中任取n個元素的集合,F(xiàn)(X)是表示X的位數(shù)組。那么對于集合X中任
8、意一個元素x,在s = F(X)中查詢x都能得到肯定的結(jié)果,即s能夠接受x。顯然,由于Bloom Filter引入了錯誤,s能夠接受的不僅僅是X中的元素,它還能夠 (u - n)個false positive。因此,對于一個確定的位數(shù)組來說,它能夠接受總共n + (u - n)個元素。在n + (u - n)個元素中,s真正表示的只有其中n個,所以一個確定的位數(shù)組可以表示個集合。m位的位數(shù)組共有2m個不同的組合,進(jìn)而可以推出,m位的位數(shù)組可以表示 個集合。全集中n個元素的集合總共有 個,因此要讓m位的位數(shù)組能夠表示所有n個
9、元素的集合,必須有 即: 上式中的近似前提是n和u相比很小,這也是實(shí)際情況中常常發(fā)生的。根據(jù)上式,我們得出結(jié)論:在錯誤率不大于的情況下,m至少要等于n log2(1/)才能表示任意n個元素的集合。 上一小節(jié)中我們曾算出當(dāng)k = ln2· (m/n)時錯誤率f最小,這時f = (1/2)k = (1/2)mln2 / n?,F(xiàn)在令f,可以推出這個結(jié)果比前面我們算得的下界n log2(1/)大了log2 e 1.44倍。這說明在哈希函數(shù)的個數(shù)取到最優(yōu)時,要讓錯誤率不超過,m至少需要取到最小值的1.44倍???/p>
10、結(jié)在計(jì)算機(jī)科學(xué)中,我們常常會碰到時間換空間或者空間換時間的情況,即為了達(dá)到某一個方面的最優(yōu)而犧牲另一個方面。Bloom Filter在時間空間這兩個因素之外又引入了另一個因素:錯誤率。在使用Bloom Filter判斷一個元素是否屬于某個集合時,會有一定的錯誤率。也就是說,有可能把不屬于這個集合的元素誤認(rèn)為屬于這個集合(False Positive),但不會把屬于這個集合的元素誤認(rèn)為不屬于這個集合(False Negative)。在增加了錯誤率這個因素之后,Bloom Filter通過允許少量的錯誤來節(jié)省大量的存儲空間。 自從Burton Bloom在70年代提出Bloom Fil
11、ter之后,Bloom Filter就被廣泛用于拼寫檢查和數(shù)據(jù)庫系統(tǒng)中。近一二十年,伴隨著網(wǎng)絡(luò)的普及和發(fā)展,Bloom Filter在網(wǎng)絡(luò)領(lǐng)域獲得了新生,各種Bloom Filter變種和新的應(yīng)用不斷出現(xiàn)。可以預(yù)見,隨著網(wǎng)絡(luò)應(yīng)用的不斷深入,新的變種和應(yīng)用將會繼續(xù)出現(xiàn),Bloom Filter必將獲得更大的發(fā)展。參考資料1 A. Broder and M. Mitzenmacher. Network applications of bloom filters: A survey. Internet Mathematics, 1(4):485509, 2005.2 M. Mitzenmacher.
12、 Compressed Bloom Filters. IEEE/ACM Transactions on Networking 10:5 (2002), 604612.3 /fabian/courses/CS600.624/slides/bloomslides.pdf4 0/seminar/2006_11_23/hash_2_yaxuan.ppt數(shù)學(xué)之美系列二十一 布隆過濾器(Bloom Filter)2007年7月3日 上午 09:35:00發(fā)表者:Google(谷歌)研究員 吳軍 在日常生活中,包括在設(shè)計(jì)計(jì)算機(jī)軟件時,我們經(jīng)常
13、要判斷一個元素是否在一個集合中。比如在字處理軟件中,需要檢查一個英語單詞是否拼寫正確(也就是要判斷它是否在已知的字典中);在 FBI,一個嫌疑人的名字是否已經(jīng)在嫌疑名單上;在網(wǎng)絡(luò)爬蟲里,一個網(wǎng)址是否被訪問過等等。最直接的方法就是將集合中全部的元素存在計(jì)算機(jī)中,遇到一個新元素時,將它和集合中的元素直接比較即可。一般來講,計(jì)算機(jī)中的集合是用哈希表(hash table)來存儲的。它的好處是快速準(zhǔn)確,缺點(diǎn)是費(fèi)存儲空間。當(dāng)集合比較小時,這個問題不顯著,但是當(dāng)集合巨大時,哈希表存儲效率低的問題就顯現(xiàn)出來了。比如說,一個象 Yahoo,Hotmail 和 Gmai 那樣的公眾電子郵件(email)提供商,
14、總是需要過濾來自發(fā)送垃圾郵件的人(spamer)的垃圾郵件。一個辦法就是記錄下那些發(fā)垃圾郵件的 email 地址。由于那些發(fā)送者不停地在注冊新的地址,全世界少說也有幾十億個發(fā)垃圾郵件的地址,將他們都存起來則需要大量的網(wǎng)絡(luò)服務(wù)器。如果用哈希表,每存儲一億個 email 地址, 就需要 1.6GB 的內(nèi)存(用哈希表實(shí)現(xiàn)的具體辦法是將每一個 email 地址對應(yīng)成一個八字節(jié)的信息指紋 50%,因此一個 email 地址需要占用十六個字節(jié)。一億個地址大約要 1.6GB, 即十六億字節(jié)的內(nèi)存)。因此存貯幾十億個郵件地址可能需要上百 GB 的內(nèi)存。除非是超級計(jì)算機(jī),一般服務(wù)器是無法存儲的。今天,我們介紹一
15、種稱作布隆過濾器的數(shù)學(xué)工具,它只需要哈希表 1/8 到 1/4 的大小就能解決同樣的問題。布隆過濾器是由巴頓.布隆于一九七零年提出的。它實(shí)際上是一個很長的二進(jìn)制向量和一系列隨機(jī)映射函數(shù)。我們通過上面的例子來說明起工作原理。假定我們存儲一億個電子郵件地址,我們先建立一個十六億二進(jìn)制(比特),即兩億字節(jié)的向量,然后將這十六億個二進(jìn)制全部設(shè)置為零。對于每一個電子郵件地址 X,我們用八個不同的隨機(jī)數(shù)產(chǎn)生器(F1,F2, .,F8) 產(chǎn)生八個信息指紋(f1, f2, ., f8)。再用一個隨機(jī)數(shù)產(chǎn)生器 G 把這八個信息指紋映射到 1 到十六億中的八個自然數(shù) g1, g2, .,g8?,F(xiàn)在我們把這八個位置的二進(jìn)制全部設(shè)置為一。當(dāng)我們對這一億個 email 地址都進(jìn)行這樣的處理后。一個針對這些 email 地址的布隆過濾器就建成了。(見下圖)現(xiàn)在,讓我們看看如何用布隆過濾器來檢測一個可疑的電子郵件地址 Y 是否在黑名單中。我們用相同的八個隨機(jī)數(shù)產(chǎn)生器(F1, F2, ., F8)對這個地址產(chǎn)生八個信息指紋 s1,s2,.,s8,然后將這八個指紋對應(yīng)到布隆過濾器的八個二進(jìn)制位,分別是 t1,t2,.,t8。如果 Y 在黑名單中,顯然,t1,t2,.,t8 對應(yīng)的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年中國汽車租賃行業(yè)投資分析、市場運(yùn)行態(tài)勢、未來前景預(yù)測報(bào)告
- 低軌衛(wèi)星互聯(lián)網(wǎng)多星協(xié)同星歷外推優(yōu)化與HARO可靠傳輸
- 二零二五年度個人旅游抵押借款合同模板與旅游服務(wù)協(xié)議
- 英語教學(xué)中“情境交談”探微
- 二零二五年度城市道路養(yǎng)護(hù)承包合同模板3篇
- 二零二五年度高端藝術(shù)品收藏品交易合同3篇
- 抖音運(yùn)營培訓(xùn)課件
- 2025版物業(yè)安全生產(chǎn)責(zé)任書編寫教程與示范文本3篇
- 奢侈品設(shè)計(jì)師職責(zé)概述
- 2025版智能安防系統(tǒng)建設(shè)項(xiàng)目工程承包合同3篇
- 成人手術(shù)后疼痛評估與護(hù)理團(tuán)體標(biāo)準(zhǔn)
- zemax-優(yōu)化函數(shù)說明書
- 2021年《民法典擔(dān)保制度司法解釋》適用解讀之擔(dān)保解釋的歷程
- 第02講 導(dǎo)數(shù)與函數(shù)的單調(diào)性(學(xué)生版)-2025版高中數(shù)學(xué)一輪復(fù)習(xí)考點(diǎn)幫
- 游戲賬號借用合同模板
- 2022年中考英語語法-專題練習(xí)-名詞(含答案)
- 商業(yè)模式的設(shè)計(jì)與創(chuàng)新課件
- 創(chuàng)新者的窘境讀書課件
- 9001內(nèi)審員培訓(xùn)課件
- 綜合素質(zhì)提升培訓(xùn)全面提升個人綜合素質(zhì)
- 如何克服高中生的社交恐懼癥
評論
0/150
提交評論