海量数据过滤——布隆过滤器
来源:互联网 发布:影集软件 编辑:程序博客网 时间:2024/05/02 04:32
笔试面试中经常有一些大量处理数据但是限制内存空间的题目,此处根据左神的《程序员代码面试指南》稍作总结,以便自己日后复习。
题目一:不安全网页的黑名单包含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必然在这里面。所以说宁可杀错三千不放过一个可疑的。
- 海量数据过滤——布隆过滤器
- 海量数据处理——布隆过滤器
- 海量数据去重——布隆过滤器以及SimHash
- 海量数据判重——布隆过滤器(Bloom filter)与Bitmap对比
- Filter过滤器—编码过滤
- 海量数据处理利器之布隆过滤器
- 海量数据处理之布隆过滤器
- 布隆过滤器--海量数据处理利器
- 海量数据处理之布隆过滤器
- Angularjs 过滤器 过滤数据 提示
- 过滤器_有效数据过滤
- 数据配合使用过滤器filterBy过滤数据
- 数据配合使用过滤器limitBy过滤数据
- 数据配合使用过滤器orderBy过滤数据
- 数据配合自定义过滤器过滤数据
- Bloom Filter --海量数据过滤的发动机
- 海量数据处理利器之Hash——在线邮件地址过滤
- 海量数据处理利器之Hash——在线邮件地址过滤
- 引发类型为“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常 解决办法
- Hadoop作业运行(OOM)内存溢出错误分类和参数调优化
- 设计模式(3)abstract server模式、适配器模式、桥接模式
- POJ Expanding Rods
- 实现一个add()函数-两数相加(不能使用四则运算以及++--)
- 海量数据过滤——布隆过滤器
- C# treeview控件部分节点添加checkbox
- 【问题解决】MySQL5.5 向MySQL数据库中插入汉字时,提示:Incorrect string value: '\Xe7\x8E...' for column 'XXX' at row 1
- 226. Invert Binary Tree
- JAVA 万年历
- X
- 事件处理——仿酷狗音乐和QQ6.0侧滑菜单
- 算法第九节:求最大公约数和最小公倍数
- Problem 6 Sum square difference