布隆过滤器

布隆过滤器

布隆过滤器是一个高空间利用率的概率(space-efficient probabilistic)数据结构,被用来检验一个元素是否在一个集合中。

特点

可能会报告一个不在集合中的元素在集合中(false positive are possible)

但在报告不在集合中的元素一定不在集合中(False negative are impossible)

使用场景举例
  • 垃圾邮件过滤

  • 重复检查

    如爬虫中,判断一个URL是否被爬过

  • 拼写检查器

使用方法

设集合S有n个元素,有k个哈希函数,记为 h 1 , h 2 , ⋯   , h k h_1,h_2,\cdots,h_k h1,h2,,hk。这些哈希函数将集合中的元素映射到结合{ 1 , 2 , ⋯   , m 1,2,\cdots,m 1,2,,m}。用一个长度为m集合保存哈希函数的映射结果(将集合对应位置设为1),这个集合称为布隆过滤器

当给出一个元素y,判断其是否在集合S中时,使用哈希函数 h 1 , h 2 , ⋯   , h k h_1,h_2,\cdots,h_k h1,h2,,hk映射,得到一个集合如{4,5,9},去布隆过滤器中查看,对应位置是否都为1。若都为1则返回在集合中,若否,则返回不在集合中。

经过简单分析即可判断满足上述特点。

原理

False Positive rate:
f = ( 1 − ( 1 − 1 m ) k n ) k ≈ ( 1 − e − k n / m ) k f=\left(1-\left(1-\frac{1}{m}\right)^{k n}\right)^{k} \approx\left(1-e^{-k n / m}\right)^{k} f=(1(1m1)kn)k(1ekn/m)k

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值