《数学之美》—— 布隆过滤器

作者:吴军

第23章 布隆过滤器

存储效率

采用散列表,每存储一亿个Email地址,就需要1.6GB的内存,即16亿字节(B)的内存

1B(byte,字节)= 8 bit(见下文);

(用散列表实现的具体办法是将每一个Email地址对应成一个8字节的信息指纹,然后将这些信息指纹存入散列表,由于散列表的存储效率一般只有50%,因此一个Email地址需要占用16个字节)

 

布隆过滤器工作原理

建立黑名单:

假定存储一亿个黑名单电子邮件地址,先建立一个16亿个比特位即两亿字节的向量,然后将这16亿个比特位全部清零。对于每一个电子邮件地址X,用8个不同的随机数产生器(F1,F2,...F8)产生8个信息指纹(f1,f2,...f8)。再用一个随机数产生器G把这8个信息指纹映射到1-16亿中的8个自然数g1,g2...g8。现在把这8个位置的比特位全部设置为1。

检测:

检测可疑的电子邮件Y是否在黑名单中。用相同的8个随机数产生器(F1,F2,...F8)对这个地址产生的8个信息指纹s1,s2,...s8,然后将这8个指纹对应到布隆过滤器的8个比特位,分别是t1,t2,...t8。如果Y在黑名单中,显然,t1,t2,...t8对应的8个比特位一定是1。

总结:

布隆过滤器的好处在于快速、省空间,但是有一定的误识别率。常见的补救方法是再建立一个小的白名单,存储那些可能被误判的邮件地址。

 

备注:

B与bit

数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。

数据类型

Byte数据类型(字节型)用一个字节(Byte)储存,可区别256个数字,取值范围:0到255。 Byte是从0-255的无符号类型,所以不能表示负数。具体参照数据类型

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值