布隆过滤器

布隆过滤器

简介

  • 布隆过滤器主要用于判断一个元素是否在集合中,常见的如垃圾邮件过滤的黑白名单方法、爬虫的网址判重模块等。
  • Hash表也可以用于判断元素是否在集合中,但是布隆过滤器只要Hash表的1/4或1/8甚至更少的空间复杂度就能完成同样的问题。
  • 布隆过滤器存在一定的误报率,通过设计bitArray的大小可以将误报率控制在极低水平。使用布隆过滤器一定是在有一定容错概率的情况下。

布隆过滤器的设计

假设数据查询的数据量为n,允许的失误率p

  1. 长度为m的BitArray,二进制数组,里面存放的数据都是0和1
  2. k个相互独立的hash函数
添加元素
  1. 初始时将BitArray中的元素全部置为0
  2. 将单条数据str,分别用k个hash函数计算出对应的hash值,将这k个hash值再对m进行取模运算,得到数据h1,h2,……hk.
  3. 将BitArray h1、h2、……hk位置上的值置为1
  4. 每条数据都重复2、3步骤。
查询元素是否在集合中
  1. 将要查询的数据分别用k个hash函数计算出对应的hash值,然后对m进行取模运算,得到数据h1 h2 …… hk.
  2. 判断BitArray h1、h2、……、hk位置上的值是否全部都是1,如果全为1则表示数据已经在集合中,如果不全为1则表示数据不在集合中。

n k m p 之间的关系

  • 样本个数n和允许失误概率p可以求出m

m=nlnp(ln)2

  • 根据m可以求出k,hash函数的个数


    k=ln2mn=0.7mn

  • 由于在计算m和k的过程中都是向上取整的,失误率会降低,可以根据下面的公式计算出具体的失误率:

    p=(1e(nkm))k

    求出真实的失误率p

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值