大数据笔记--Bloom Filter
来源:互联网 发布:cad三维设计软件 编辑:程序博客网 时间:2024/05/16 23:35
应用场景:现有10亿个邮件地址,都是非垃圾邮件地址,存在集合S中。那么对于输入的任意邮件地址,如何判断是否在集合S中。
如果将10亿个地址都放入内存中查找,假设一个地址是10个字符,占用10个字节,那么10亿个地址需要占用10G内存,很显然是非常浪费资源的。
Bloom Filter 的思路:
1. 在内存中开1G的空间,记为R,总共80亿个bit,初始全部置为0。
2. 将10亿个邮件地址通过某个随机的hash函数,计算出一个整数,然后将R中对应的bit置为1。例如,整数
是1000,则将R中第1000位记为置为1。当然很有可能会对同一个位多次操作。
当输入一个待判断的邮件地址时,通过hash函数快速映射到R中,如果对应的位为1,则该邮件地址为非垃圾邮件地址,如果为0,则判断为垃圾邮件地址。
很显然,会有一定的概率将垃圾邮件地址判断为非垃圾邮件地址,那么这种概率有多大呢?直觉可以大概判断是1/8,就是恰好映射到了为1的位。这种概率,也称为伪阳率。
下面来证明之。
先看一个启发性的例子(我没有用书中的例子,我觉得他讲的不清楚,这里是自己的理解),有y个球,x个盒子,这y个球随机的放进x个盒子。那盒子至少存在一个球的概率是多大呢?
先来算,一个都没有的概率
至少存在一个的概率,用1减去上式就可以了,当x很大时,可以根据幂定律得到
那么对于80亿个位,就是80亿个盒子,10亿个邮件地址,就是10亿个球。得到位为1的概率为0.1175
在实际情况中,有大概80%的垃圾邮件地址,这80%中,有11.75%不会被过滤,但大多数都会被过滤掉。
如何进一步降低false postive呢?增加hash函数,每一个S中的地址,通过几个hash函数映射,映射的相应位都置为1,这样相当于增加了球的个数。判断规则为,必须映射的所有位都是1,就接受待判断的地址为正常邮件地址。
现在看正式的证明,如果R中空间为n,S中个数为m,hash函数为k个,那每一个位至少为1的概率为:
也就是有1的位数占总位数的比率为:
那false postive 就为:
如果将该式对k求导,可得最小化这个概率的k取值为:
- 大数据笔记--Bloom Filter
- Bloom filter:大数据快速排除算法
- Bloom filter:大数据快速排除算法
- Bloom filter:大数据快速排除算法
- Bloom filter:大数据快速排除算法
- 大数据集处理策略 Bloom-Filter trie树
- bloom filter -- 处理大数据集的利器
- 大数据时代-Bloom Filter(布隆过滤器)
- No.17【大数据算法】Bloom Filter 的数学背景
- 大数据处理算法--Bloom Filter
- bloom filter的数据统计
- 学习笔记-bloom filter
- 大数据处理算法—Bloom Filter
- 大数据处理算法二:Bloom Filter算法
- 大数据处理算法二:Bloom Filter算法
- 大数据处理算法二:Bloom Filter算法
- No. 15【大数据算法】Bloom Filter 的原理和实现
- 海量数据面试题----Bloom Filter/Bitmap
- 平衡二叉树(AVL)实现(2)
- 用libvlc进行网络串流streaming
- [ M3 PN ] STM32F10XXX(Cortex-M3) MDK + J-Link环境搭建 建立工程 下载程序
- HDU 3032 Nim or not Nim? SG打表找规律
- 最少拦截系统
- 大数据笔记--Bloom Filter
- sdjzuoj——1012:外币兑换
- IOS -----> XML_DOM
- SpringMVC入门
- Android框架内Activity 之间消息的实现
- UML—构件图
- 1220:C语言7.7
- Moving Tables
- 胖子伤不起