布隆过滤器(Bloom Filter)以及相关衍生

布隆过滤器(Bloom Filter)

简要介绍:

布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。

算法

  • 首先需要k个hash函数,每个函数可以把key散列成为1个整数
  • 初始化时,需要一个长度为n比特的数组,每个比特位初始化为0
  • 某个key加入集合时,用k个hash函数计算出k个散列值,并把数组中对应的比特位置为1
  • 判断某个key是否在集合时,用k个hash函数计算出k个散列值,并查询数组中对应的比特位,如果所有的比特位都是1,认为在集合中。
    在这里插入图片描述

优点

不需要存储key,节省空间

缺点

  • 算法判断key在集合中时,有一定的概率key其实不在集合中
  • 无法删除

计数布隆过滤器

简要介绍

标准Bloom filter对于需要精确检测结果的场景将不再适用,而带计数器的Bloom filter的出现解决了这个问题。Counting Bloom filter实际只是在标准Bloom filter的每一个位上都额外对应得增加了一个计数器,在插入元素时给对应的 k (k 为哈希函数个数)个 Counter 的值分别加 1,删除元素时给对应的 k 个 Counter 的值分别减 1。

优点

可以删除

缺点

无法合并,占用空间大

Quotient Filter

简要介绍

商过滤器是一种空间效率很高的概率数据结构。他是基于一个hash表,有三个fingerprint 比较重要,
is_occupied :1:
is_continuation: 1:被占用,不是第一个余数
is_shifted: 1:插槽中的余数不在其规范插槽中
在这里插入图片描述
插入实例
在这里插入图片描述
在状态1的时候插入三个元素,他们的余数分别为1,4,7,此时都是空的我们可以直接将其占用;在状态2的时候,c余数为1,但是1已经有了,所以c被放到2中,延续和移动要置1;插入d是2,也就是他的规范槽是2,但是被占了,所以要将2的置is_occupied 置1;d所在的位置是移位以后的。
在状态三的时候,是假设了ar<bR,所以其它人都得移动,

优点

  • 可以合并

缺点

  • 查询速度慢

MergeCBF

优点

  • 可以合并

缺点

  • 查询速度慢
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值