布隆过滤器 Bloom Filter
使用普通集合来判断一个元素是否已存在于集合中,需要占用比较大的空间。而使用Bloom Filter 可有效节省空间。 Bloom Filter 以较少的内存占用及较小的误判率达到判断元素是否存已经加入集合中的目的。Bloom Filter是一种空间效率很高的随机数据结构,可以被看作是对位图的扩展.
基本思想
首先创建一个长度位m的位数组,初始化为全0.对集合S中的每一个元素,通过k个散列函数计算出k个bit位,将位数组中对应的位置1.那么,当判断一个元素是否存在于集合S中时,同样计算k个bit位,如果位数组中这k个位置任意一位是0,则该元素不在集合S中,如果全是1,则以较大概率认为存在于该集合中.因此存在一定的误判率(false positive rate).
误判率
插入一个元素后,某一特定比特位仍然为 0 的概率为\((1-{1\over m})^k\).
由于
\[
\lim_{x\rightarrow\infty}(1-{1\over x})^{-x}=e
\]
所以插入 n个元素后特定位仍为 0 的概率为\(p'=(1-{1\over m})^{kn}\approx e^{-{kn\over m}}\).
p'同时是位数组中0的比例的数学期望.特定位被置为 1 的概率为:\(t=1-p'\).
误判存在于k个独立hash函数的位都是1的情况,因此误判率为
\[
f=t^k\approx (1-e^{-{kn\over m}})^k
\]
从误判率公式可以看出,当位数组(桶)的位数越多时,误判率越小.而误判率与hash函数个数并非单调递减的关系.
最优散列函数个数
我们的目标是最小化误判率,因此最优的散列函数个数应使得误判率较小.
另\(p=e^{-{kn\over m}}\),则\(f=(1-p)^k=e^{k\ln(1-p)}\).最小化f等价于最小化 \(g=k\ln(1-p)\) 的值.因为\(\ln p=-{kn\over m}\),所以\(k=-{m\over n}\ln p,g=-{m\over n}\ln p\ln(1-p)\).根据对称性,可以看出,当\(p={1\over 2}\)时,\(k={m\over n}\ln2\approx 0.693{m\over n}\)时,取得最小误判率
\[
f=({1\over 2})^k=(2^{-\ln 2})^{m\over n}\approx 0.6185^{m\over n}
\]
p是数组中某一位仍是0的概率,所以p=0.5意味着数组中一半还空着(0位),才能保持低误判率. 从\(k={m\over n}\ln2\) 可以看出最优的hash函数个数应当与数组位数成正比,与集合的元素个数成反比,这也符合我们的直觉.
应用
数据判重或者求交集.
参考
Jacob Honoroff. An Examination of Bloom Filters and their Applications. cs.unc.edu/~fabian/courses/CS600.624/slides/bloomslides.pdf. March 16, 2006.
布隆过滤器 Bloom Filter的更多相关文章
- [转载]布隆过滤器(Bloom Filter)
[转载]布隆过滤器(Bloom Filter) 这部分学习资料来源:https://www.youtube.com/watch?v=v7AzUcZ4XA4 Filter判断不在,那就是肯定不在:Fil ...
- 布隆过滤器(Bloom Filter)详解——基于多hash的概率查找思想
转自:http://www.cnblogs.com/haippy/archive/2012/07/13/2590351.html 布隆过滤器[1](Bloom Filter)是由布隆(Burton ...
- 布隆过滤器(Bloom Filter)的原理和实现
什么情况下需要布隆过滤器? 先来看几个比较常见的例子 字处理软件中,需要检查一个英语单词是否拼写正确 在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上 在网络爬虫里,一个网址是否被访问过 yahoo, ...
- [转载] 布隆过滤器(Bloom Filter)详解
转载自http://www.cnblogs.com/haippy/archive/2012/07/13/2590351.html 布隆过滤器[1](Bloom Filter)是由布隆(Burton ...
- 布隆过滤器(Bloom Filter)详解
直观的说,bloom算法类似一个hash set,用来判断某个元素(key)是否在某个集合中.和一般的hash set不同的是,这个算法无需存储key的值,对于每个key,只需要k个比特位,每个存储一 ...
- 浅谈布隆过滤器Bloom Filter
先从一道面试题开始: 给A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL. 这个问题的本质在于判断一个元素是否在一个集合中.哈希表以O(1) ...
- 【面试突击】-缓存击穿(布隆过滤器 Bloom Filter)
原文地址:https://blog.csdn.net/fouy_yun/article/details/81075432 前面的文章介绍了缓存的分类和使用的场景.通常情况下,缓存是加速系统响应的一种途 ...
- 布隆过滤器 Bloom Filter 2
date: 2020-04-01 17:00:00 updated: 2020-04-01 17:00:00 Bloom Filter 布隆过滤器 之前的一版笔记 点此跳转 1. 什么是布隆过滤器 本 ...
- 布隆过滤器(Bloom Filter)-学习笔记-Java版代码(挖坑ing)
布隆过滤器解决"面试题: 如何建立一个十亿级别的哈希表,限制内存空间" "如何快速查询一个10亿大小的集合中的元素是否存在" 如题 布隆过滤器确实很神奇, 简单 ...
- 探索C#之布隆过滤器(Bloom filter)
阅读目录: 背景介绍 算法原理 误判率 BF改进 总结 背景介绍 Bloom filter(后面简称BF)是Bloom在1970年提出的二进制向量数据结构.通俗来说就是在大数据集合下高效判断某个成员是 ...
随机推荐
- 使用谷歌浏览器调试WEB前端的一些必备调试技巧
转载:http://www.techug.com/post/chrome-debug-tips.html Chrome的开发者工具是个很强大的东西,相信程序员们都不会陌生,不过有些小功能可能并不为大众 ...
- sublime编写markdownm
sublime编写markdownm 以前用有道云笔记,找了半天更改字体大小,结果还找不 到,那个字实在是太小了,像我这种有强迫症的患者,实 在受不了简约风格的有道云,所以上网找了与和诺插件并 受到一 ...
- D.王者荣耀交流协会——PSP Daily(测评人:贾男男)
D.王者荣耀交流协会——PSP Daily(测评人:贾男男) 一.基于NABCD评论作品,及改进建议 每个小组评论其他小组beta发布的作品.1.根据(不限于)NABCD评论作品的选题;2.评论作品对 ...
- PSP总结报告1
回答作业问题 1.回想一下你曾经对计算机专业的畅想 我高考后报考的是计算机科学与技术,当时对计算机技术基本了解为零,当时以为什么东西都会用到计算机,学计算机以后不会找不到工作,刚开学的时候对计算机一窍 ...
- MySQL课堂练习 20162315
练习内容 1.参考教材相关代码,提交能连接到world的截图(有学号水印) 2.查询world数据库,获得人口超过500万的所有城市的列表. 3.查询world数据库,获得New Jersey州所有城 ...
- TCP/IP,HTTP,HTTPS,WEBSocket协议
我看看着挺多的,我暂时没时间自己写,有需要的请借鉴 http://mp.weixin.qq.com/s?__biz=MzI0MDQ4MTM5NQ==&mid=2247486927&id ...
- 剑指offer :从尾到头打印链表
题目描述: 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 解题思路: 链表的遍历只能从头向尾进行,要从尾到头输出,考虑用栈.先从头到尾遍历一次链表,同时将值进栈,再清空栈,同时将值 ...
- 结对&团队之1715|K班取经
声明:同学请勿抄袭,追责莫要怪我: 因为暂时闲着没事,就翻阅学长学姐的博客找找灵感,个人觉得应该还有人和我一样对软工实践未来的一大段路还很天真,包括目前的结对作业和团队组队也很迷路,于是写下这篇博客提 ...
- Java 经典 书籍
1.<你的灯还亮着么> 方法论 2.<程序员修炼之道 从小工到专家> 方法论 3.<发布!软件的设计与部署> 案例&经验总结 4.<思考,快与慢> ...
- C++派生类构造函数调用顺序(详解)
我们来看下面一段代码: class B1 { public: B1(int i) {cout<<"constructing B1 "<<i<<e ...