網絡爬蟲之url等高效率去重原理

           布隆過濾器用於字符串去重複,好比網絡爬蟲抓取時URL去重、郵件提供商反垃圾黑名單Email地址去重。等等。用哈希表也能夠用於元素去重,可是佔用空間比較大,並且空間使用率只有50%。數組

  布隆過濾器只佔哈希表的1/8或1/4的空間複雜度,就能解決一樣的問題,可是有必定的誤判,並且不能刪除已有元素。元素越多,誤報率越大,可是不會漏報。對於還須要刪除的布隆過濾器,還有Counter Bloom Filter,這個是布隆過濾器的變體,能夠刪除元素。網絡

布隆過濾器的原理函數

布隆過濾器須要的是一個一維數組(和位圖相似)和K個映射函數(和Hash表相似),在初始狀態時,對於長度爲m的位數組array,它的全部位被置0。spa

  

對於有n個元素的集合S={S1,S2...Sn},經過k個映射函數{f1,f2,......fk},將集合S中的每一個元素Sj(1<=j<=n)映射爲K個值{g1,g2...gk},而後再將位數組array中相對應的array[g1],array[g2]......array[gk]置爲1:字符串

  

  若是要查找某個元素item是否在S中,則經過映射函數{f1,f2,...fk}獲得k個值{g1,g2...gk},而後再判斷array[g1],array[g2]...array[gk]是否都爲1,若全爲1,則item在S中,不然item不在S中。這個就是布隆過濾器的實現原理。
前面說到過,布隆過濾器會形成必定的誤判,由於集合中的若干個元素經過映射以後獲得的數值恰巧包括g1,g2,...gk,在這種狀況下可能會形成誤判,可是機率很小。it

相關文章
相關標籤/搜索