网络爬虫之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

相关文章
相关标签/搜索