Bloom Filter布隆过滤器

概述:

布隆过滤器是一种空间效率很高的随机数据结构,是用位数组表示的一个集合

他能判断一个元素是否在这个集合内(概率),就是说如果通过布隆判断不在,那么一定不在,

但是会存在漏判的情况:如果判断元素存在集合中,有一定的概率判断错误

适用场景:

在能容忍底错误率的应用场景下,它极大的节省了空间


基本原理:

  1. m位的位数组,初始状态都为0
  2. k个独立的hash函数,通过把元素计算hash函数后(比如hashmap的hashcode计算的是一个int值,把它转换为二进制),然后在对应的位数组位置上把值置1,其中:一个位置可能被多次置1,这种情况下只第一次起作用。正是这种设计会导致布隆过滤器无法删除元素,改进的做法是count bf,给每一位上加一个计数器,当对应位的计数器都为0时可以删除元素。
  3. 判断元素是否存在集合,通过把元素x计算k个hash函数,如果m位数组对应位上都是1,则存在。

这个过程存在两个问题:

  1. 上面提到的无法删除元素情况
  2. 输入元素个数n,位数组大小m,hash函数个数k之间的关系:有个结论k=(ln2)*(m/n)时错误率最小。
有空可以翻翻论文看看推导过程

实际应用中布隆过滤器可以跟key-value数据库一起使用,加快查询,bf占很小的空间,所以可以常驻内存,对用大部分不存在的元素,访问bf就能判断出来,省下一小部分需要访问在硬盘的key-value数据库,就可以大大提高效率。

实际的问题:
给A、B两个文件,个存放50亿个url,每个url占用64字节,内存限制4G,让你找出A、B文件共同的URL?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值