布隆过滤器

1、概念

布隆过滤器本质上是一种数据结构,一种比较巧妙的概率性数据结构。它的特点就是高效的插入和查询。可以用来判断“某个元素是否一定不存在或者可能存在”。

2、实现原理

2.1、HashMap的问题

在通常情况下,我们要判断某个元素是否存在,可能用的最多还是HashMap。我们确实可以将其映射成HashMap的key。然后可以在O(1)的时间复杂度内返回结果,效率很高。
但是HashMap也有自己的缺点。那就是当存储的元素很多的时候,会占用大量的内存。

2.2.1、布隆顾虑器的数据结构

布隆过滤器本质上就是一个bit数组。
image.png
布隆过滤器本质上是一种数据结构。那么,布隆过滤器是如何存储元素的呢?
当我们需要将某个元素存储到布隆过滤器时,我们需要1个或者多个hash函数,计算出元素的多个hash值。并将每个hash指向的bit位设置为1。
例如:我们有3个不同的hash函数,和一个布隆过滤器。现在将值“hello”存储到布隆过滤器中,需要将3个hash函数计算的hash值在bit数组上的指定位置设置为1。假设“hello”通过3个hash函数计算的hash值是1,3,5。那么,此时布隆过滤器的对应的结果如下:
image.png
这时,如果在存储一个值“world”,通过hash函数计算得到的结果是1,4,6,相应的布隆过滤器中的结果如下图所示:
image.png
在这两个计算得到的hash值中,我们发现hash值1出现了两次,也就是说在布隆过滤器的数组下标为1的值被设置了两次。得到这样一个布隆过滤器结果,当我们,要判断某个元素是否存在时,只要拿计算到了三个hash值,到bit数组中,判断值是否为1即可。当存在为0的值时,则说明这个元素一定不存在。但是当全部为1,确不能判断其一定存在,原因就是bit数组上同一个位置,可能会被其他元素的hash覆盖了。
这也就是为什么布隆过滤器能判定一个元素一定不存在,却无法判定一个元素一定存在的原因。

3、如何选择布隆过滤器的容量(m)和hash函数个数(k)

构建布隆过滤器的难点就在于Bloom Filter的大小和hash函数的个数上面。
如果Bloom Filter的大小太小,则会导致Bloom Filter存储不了多少数据,bit 数组上所有位都会被设置成1,那么在查询任何值,都会返回“可能存在”,起不到过滤的目的。因此布隆顾虑器的长度会直接影响误报率。布隆过滤器越长,误报率越小。
同时,Hash函数的个数,也需要考虑。hash函数个数越多,Bloom Filter bit位置为1的速度越快,且Bloom Filter的效率越低。但是如果Hash函数个数越小的话,误报率会变高。
一般计算m和k是有一个通用的公式:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
公式中,n:为数据量大小,p:误判率,m:Bloom Filter容量,k:hash函数个数。
其中,hash函数个数k和Bloom Filter容量m、以及误判率存在如下的关系:
image.png

4、布隆过滤器的缺点

布隆过滤器最明显的缺点就是:数据无法删除。一经保存,就不能从布隆过滤器中删除。

5、Counting Bloom Filter

为了解决标准Bloom Filter无法删除数据的问题。有人提出了一种变种的Bloom Filter。那就是Counting Bloom Filter。
Counting Bloom Filter相比较于标准的Bloom Filter,在将bit数组的每一位扩展为一个计数器(counter)。插入元素时,将k个hash值对应的计数器都加1,当删除元素时,将对应的k个hash的计数器都减1。
Counting Bloom Filter通过多占用一定内存的代价,给布隆过滤器增加了删除的功能。
image.png
相比较于标准Bloom Filter,Counting Bloom Filter的bit数组上每一位的值可能会大于1。

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值