BloomFilter
2016-01-13 17:10
211 查看
Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法。通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合。
简介
Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省。原理
初始状态
下面我们来看Bloom Filter是如何用位素组来表示集合的。初始状态下,Bloom Filter是一个包含m位的位数组Bit Vector,每一位都是0。![](http://www.lchml.com/images/bloomfilter/bf-1.png)
添加元素
往数组中添加一个元素x时,用k个独立的、均匀分布的哈希函数h1(),h2(),⋯hk()h1(),h2(),⋯hk()
对元素x进行哈希,假设得到k个结果如下
h1(x)=8,h2(x)=11,⋯hk(x)=3h1(x)=8,h2(x)=11,⋯hk(x)=3
则把位数组上对应的位置为1,这样就把元素x映射到位数组中的k个二进制位了。(当某个位被重复置为1时,以第一次置1为准)
......
阅读全文(http://www.lchml.com/blog/2015/09/12/bloomfilter.html)
相关文章推荐
- 获取存储过程
- VM虚机无法重启关机的强制处理办法
- VM虚机无法重启关机的强制处理办法
- Open Systems SnapVault(OSSV)最佳实践手册
- 图像处理 UIGraphicsBeginImageContext
- NSOperation
- 数据解析的时间给model赋字典的值
- Android 好的源码依赖包 收集
- 【NOIP2015day1T2】【codevs4511】信息传递,最小环
- Python的基础--对象
- linux驱动_最简单的例子
- Android 讲解:ListView
- 【HTML5】DOMContentLoaded事件
- Contacts(简介)
- JQuery总结:选择器归纳、DOM遍历和事件处理、DOM完全操作和动画
- 安装iOS开发环境Xcode
- C++11: Dynamic Memory
- Twemproxy(nutcracker)容易误解的参数
- Turtle库
- linux变量替换、字符串操作