布隆过滤器(BoomFilter)

1.原理:

          a.解决的问题:
               判断一个元素是否在一个集合中
 
          b.Hash表的特点:
               i.快速准确,但是耗费存储空间
               ii.先将url或者email转为8个字节的信息指纹,在考虑Hash50%的存储效率,1亿url或者email需要16亿字节,即1.6GB空间
 
          c.布隆过滤器:
               i.能用1/8到1/4大小的空间就能解决问题,主要用一个很长的二进制向量和一系列随机映射函数
               ii.对1亿的email地址,先申请16亿字节空间,作为一个二进制向量,然后将其全部清0,对一个地址X,用8个随机数产生器(F1,...,F8)生成8个信息指纹(f1,...,f8),再用一个随机数产生器G把这8个信息指纹映射到1-16亿中的8个自然数g1,...,g8,再把这8个自然数对应位置设置为1,构成布隆过滤器
           
               iii.布隆过滤器绝对不会漏掉在黑名单中的email,但是有时会出现误判,将正确的email判断为黑名单,一种处理办法是建立一个小的白名单,储存那些可能被误判的邮件地址
       
2.布隆过滤器的误识别率:
          a.假阳性:把不在集合中的元素错判成集合中的元素
          b.假设布隆过滤器有m比特,里面有n个元素,每个元素对应k个指纹的Hash函数,求一个位置在插入n个元素后被置成1的概率(因为置成1有很多种可能,考虑置成0方便简单)
               i.某个比特被置为1的概率为1/m,为0的概率为1-1/m
               ii.插入一个元素后,其为0的概率为(1-1/m)^k,插入n个元素后,为0的概率为(1-1/m)^kn;则插入n个元素后为1的概率为1-(1-1/m)^kn
               iii.当新的元素被误判时,需要其k个Hash函数的信息指纹都为1,即(1-(1-1/m)^kn)^k,约为(1-e^kn/m)^k,
        

转载于:https://www.cnblogs.com/uttu/p/6289844.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值