4 布隆过滤器

布隆过滤器

  1. 布隆过滤器(BloomFilter)是一种空间效率很高的随机数据结构,可以看做是对位图(bit-map)的扩展;
  2. 原理是:当一个元素被加入集合时,通过 K 个 Hash 函数将这个元素映射成一个位阵列(Bitarray) 中的 K 个点,并将它们置为 1。在检索一个元素是否在一个集合中时,我们只要看看这些点是不是都是 1 就能大约判断出集合中有没有它了:如果这些点有任何一个 0,则被检索元素一定不在;如果都是 1,则被检索元素很可能存在集合中(因为哈希函数的特点,两个不同的数通过哈希函数得到的值可能相同);
  3. 布隆过滤器有一定的误判率:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合。因此,它不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,布隆过滤器通过极少的错误换取了存储空间的极大节省;
  4. 补救方法:布隆过滤器存在一定的误识别率。常见的补救办法是在建立白名单,存储那些可能被误判的元素。

1 寻找通过 URL

问题

给你 A,B 两个文件,各存放 50 亿条 URL,每条 URL 占用 64 字节,内存限制是 4G,让你找出 A,B 文件共同的 URL。

分析

如果允许有一定的错误率,可以使用布隆过滤器,4G 内存大概可以表示 320 亿 bit。

步骤

将其中一个文件中的 url 使用布隆过滤器映射为这 340 亿 bit,然后读取另外一个文件的 url,使用布隆过滤器进行判重,如果是重复的,那么该 url 就是共同的 url(允许有一定的错误率的情况)。

2 垃圾邮件过滤

问题

如何过滤垃圾邮件。

分析

比较直观的想法是把常见的垃圾邮件地址存到一个巨大的集合中,然后遇到某个新的邮件,将它的地址和集合中的全部垃圾邮件地址一一进行比较,如果有元素与之匹配,则判定新邮件为垃圾邮件。如果允许一定的误判率的话,我们可以使用布隆过滤器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellosc01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值