海量数据过滤——布隆过滤器

笔试面试中经常有一些大量处理数据但是限制内存空间的题目,此处根据左神的《程序员代码面试指南》稍作总结,以便自己日后复习。

题目一:不安全网页的黑名单包含100亿个黑名单网页,每个网页的URL最多占用64B,现在要实现一个网页过滤系统,根据网页的URL判断该网页是否在黑名单上。
允许一定的判断失误率,空间内存限制在30GB以内
如果是直接用哈希函数处理,肯定会长处空间限制,所以这里要用到的是:
布隆过滤器 ——“宁可错杀三千,绝不放过一个”。
布隆过滤器实际上是一个位图bitMap,我们现在假设有一个长度为m的bit类型的数组,以及 k 个互相独立的优秀的哈希函数,且这k个哈希函数的输出域都大于或等于 m。我们将网页的URL作为k个哈希函数的输入对象进行哈希处理,分别得到 k 个值,这k 个值中可能有相同的,但是值之间互相独立不关联的。我们将这k个值对m模运算,得到的 k 个值都在 0~m之间。最后将这 k 个值对应的bitMap的值置为1,当我们将所有的URL都处理完毕后,bitMap上的很多位都被置为了1。
当我们要查询一个URL是否在黑名单内时,我们先将这个URL进行哈希处理 ,因为有K个函数所以得到 k 个值。接着检查这 k 个值对应的bitMap 位是否为1,如果 有一个不为 1,那么说明这个URL不在这个这里面,是安全的网站,如果对应的 bitMap 位的值都是 1 那么说明这个URL可能在这里面。说可能是因为当URL的数量很多时 ,可能会出现不同URL哈希处理后得到相同的值,所以说是有可能在这里面。但是如果对应的位值为0,那么这个URL必然在这里面。所以说宁可杀错三千不放过一个可疑的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值