算法--基础--03--布隆过滤器

算法–基础–03–布隆过滤器


转载https://blog.youkuaiyun.com/leeafay/article/details/78681534

1、介绍

布隆在1970年提出了布隆过滤器(Bloom Filter),是一个很长的二进制向量(可以想象成一个序列)和一系列随机映射函数(hash function)。

布隆过滤器可以用于检索一个元素是否在一个集合中。

优点:占用空间小,查询快 
缺点:有误判,删除困难

2、原理

2.1、添加元素:设计一个布隆过滤器

假如我们有一个字节数组(行阵列),含有11位数字(可以看成一个哈希表)。

在这里插入图片描述

假设:有一个待检测的值:25

  • 第1步:将25化为二进制11001
  • 第2步:
    • 从二进制11001 取奇数位为:101,是5。(这就是生成的hash function)
    • 从二进制11001 取偶数位为:10,是2。(这就是生成的hash function)
  • 第3步:对字节数组总位数取模,也就是哈希运算
    • 5 mod 11 = 5,将索引5的数 置1
    • 2 mod 11 = 2,将索引2的数 置1

结果

在这里插入图片描述

2.2、查询元素:用布隆过滤器判断一个数是否存在

假如我们有一个已知的过滤器: 10100101010

在这里插入图片描述

假设:我们想知道118有没有在这个过滤器里出现过:

  • 第1步:将118化为二进制1110110
  • 第2步:
    • 从二进制1110110 取奇数位为:1110,是14。(这就是生成的hashfunc)
    • 从二进制1110110 取偶数位为:101,是5。(这就是生成的hashfunc)
  • 第3步:对字节数组总位数取模,也就是哈希运算
    • 14 mod 11 = 3,将索引3的数 置1
    • 5 mod 11 = 5,将索引5的数 置1

右图在上表中,索引3为0,索引5为1,因此我们认为118没有出现过。

2.3、hash function

上面两个例子中的hash function是我们计算出来的。当我们设定hash function的时候,同样按照相同的方法计算哈希值(取模) 
添加元素时,用k个hash function将它hash得到bloom filter中k个bit位,将这k个bit位置1。

判断元素是否在集合中时,用k个hash function将它hash得到k个bit位。

  • 若这k bits全为1,则此元素在集合中
  • 若其中一位不为1,则此元素比不在集合中(因为如果在,则在添加时就已经把对应的k个bits位置为1)。

3、应用

垃圾邮件过滤

4、误判率(FP)的计算

布隆过滤器只有FP,没有FN,即不会漏报,但是会有误报。当可以承受一些误报时,布隆过滤器比其它表示集合的数据结构有着很大的空间优势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值