Bloom Filter算法的PHP實現(xiàn)

Bloom Filter的基本處理思路:

申請一批空間用于保存0 1信息,再根據(jù)一批哈希函數(shù)確定元素對應(yīng)的位置巧鸭,如果每個哈希函數(shù)對應(yīng)位置的值為全部1,說明此元素存在辐啄。相反,如果為0,則要把對應(yīng)位置的值設(shè)置為1饼问。由于不同的元素可能會有相同的哈希值养筒,即同一個位置有可能保存了多個元素的信息郑叠,從而導(dǎo)致存在一定的誤判率裆装。

如果申請空間太小,隨著元素的增多潦闲,1會越來越多攒菠,各個元素沖突的機會越來越來大,導(dǎo)致誤判率會越來越大歉闰。另外哈希函數(shù)的選擇及個數(shù)上也要平衡好辖众,多個哈希函數(shù)雖然可以提供判斷的準(zhǔn)確性,但是會降低程序的處理速度新娜,而哈希函數(shù)的增加又要求有更多的空間來存儲位置信息赵辕。

Bloom-Filter的應(yīng)用。

Bloom-Filter一般用于在大數(shù)據(jù)量的集合中判定某元素是否存在概龄。例如郵件服務(wù)器中的垃圾郵件過濾器还惠。在搜索引擎領(lǐng)域,Bloom-Filter最常用于網(wǎng)絡(luò)蜘蛛(Spider)的URL過濾私杜,網(wǎng)絡(luò)蜘蛛通常有一個 URL列表蚕键,保存著將要下載和已經(jīng)下載的網(wǎng)頁的URL救欧,網(wǎng)絡(luò)蜘蛛下載了一個網(wǎng)頁,從網(wǎng)頁中提取到新的URL后锣光,需要判斷該URL是否已經(jīng)存在于列表中笆怠。此時,Bloom-Filter算法是最好的選擇誊爹。
比如說蹬刷,一個象 Yahoo,Hotmail 和 Gmai 那樣的公眾電子郵件(email)提供商,總是需要過濾來自發(fā)送垃圾郵件的人(spamer)的垃圾郵件频丘。一個辦法就是記錄下那些發(fā)垃圾郵件的 email 地址办成。由于那些發(fā)送者不停地在注冊新的地址,全世界少說也有幾十億個發(fā)垃圾郵件的地址搂漠,將他們都存起來則需要大量的網(wǎng)絡(luò)服務(wù)器迂卢。

布隆過濾器是由巴頓.布隆于一九七零年提出的。它實際上是一個很長的二進制向量和一系列隨機映射函數(shù)桐汤。我們通過上面的例子來說明起工作原理而克。

假定我們存儲一億個電子郵件地址,我們先建立一個十六億二進制(比特)怔毛,即兩億字節(jié)的向量员萍,然后將這十六億個二進制位全部設(shè)置為零。對于每一個電子郵件地址 X馆截,我們用八個不同的隨機數(shù)產(chǎn)生器(F1,F2, ...,F8) 產(chǎn)生八個信息指紋(f1, f2, ..., f8)充活。再用一個隨機數(shù)產(chǎn)生器 G 把這八個信息指紋映射到 1 到十六億中的八個自然數(shù) g1, g2, ...,g8》淅颍現(xiàn)在我們把這八個位置的二進制位全部設(shè)置為一蜡娶。當(dāng)我們對這一億個 email 地址都進行這樣的處理后。一個針對這些 email 地址的布隆過濾器就建成了映穗。(見下圖) 現(xiàn)在窖张,讓我們看看如何用布隆過濾器來檢測一個可疑的電子郵件地址 Y 是否在黑名單中。我們用相同的八個隨機數(shù)產(chǎn)生器(F1, F2, ..., F8)對這個地址產(chǎn)生八個信息指紋 s1,s2,...,s8蚁滋,然后將這八個指紋對應(yīng)到布隆過濾器的八個二進制位宿接,分別是 t1,t2,...,t8。如果 Y 在黑名單中辕录,顯然睦霎,t1,t2,..,t8 對應(yīng)的八個二進制一定是一。這樣在遇到任何在黑名單中的電子郵件地址走诞,我們都能準(zhǔn)確地發(fā)現(xiàn)副女。
布隆過濾器決不會漏掉任何一個在黑名單中的可疑地址。但是蚣旱,它有一條不足之處碑幅。也就是它有極小的可能將一個不在黑名單中的電子郵件地址判定為在黑名單中戴陡,因為有可能某個好的郵件地址正巧對應(yīng)八個都被設(shè)置成一的二進制位。好在這種可能性很小沟涨。我們把它稱為誤識概率恤批。在上面的例子中,誤識概率在萬分之一以下裹赴。

布隆過濾器的好處在于快速喜庞,省空間。但是有一定的誤識別率棋返。常見的補救辦法是在建立一個小的白名單赋荆,存儲那些可能別誤判的郵件地址。

簡單實現(xiàn)

$set = array(1,2,3,4,5,6);
$bloomFiter = array(0,0,0,0,0,0,0,0,0,0);

foreach($set as $key){
    $bloomFiter[$key] = 1 ;
}
 
//判斷是否在集合中
 if($bloomFiter[9] ==1){
     echo '在set 中'; 
 }else{
     echo '不在set 中' ;
 }

其他完整實現(xiàn)

請參考以下文獻列表
1懊昨、PHP中實現(xiàn)Bloom Filter算法
2窄潭、php實現(xiàn)Bloom Filter
3、php-bloom
4酵颁、url去重 --布隆過濾器 bloom filter原理及python實現(xiàn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嫉你,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子躏惋,更是在濱河造成了極大的恐慌幽污,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件簿姨,死亡現(xiàn)場離奇詭異距误,居然都是意外死亡,警方通過查閱死者的電腦和手機扁位,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門准潭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人域仇,你說我怎么就攤上這事刑然。” “怎么了暇务?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵泼掠,是天一觀的道長。 經(jīng)常有香客問我垦细,道長择镇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任括改,我火速辦了婚禮腻豌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己饲梭,他們只是感情好乘盖,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著憔涉,像睡著了一般订框。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兜叨,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天穿扳,我揣著相機與錄音,去河邊找鬼国旷。 笑死矛物,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的跪但。 我是一名探鬼主播履羞,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼屡久!你這毒婦竟也來了忆首?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤被环,失蹤者是張志新(化名)和其女友劉穎糙及,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筛欢,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡浸锨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了版姑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柱搜。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖漠酿,靈堂內(nèi)的尸體忽然破棺而出冯凹,到底是詐尸還是另有隱情谎亩,我是刑警寧澤炒嘲,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站匈庭,受9級特大地震影響夫凸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜阱持,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一夭拌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦鸽扁、人聲如沸蒜绽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躲雅。三九已至,卻和暖如春骡和,著一層夾襖步出監(jiān)牢的瞬間相赁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工慰于, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钮科,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓婆赠,卻偏偏與公主長得像绵脯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子休里,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

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