Bloom filter

来源:互联网 发布:mac os 10.7软件推荐 编辑:程序博客网 时间:2024/06/07 11:43

原文链接:blog.csdn.net/jiaomeng/article/details/1495500
Bloom Filter是一种空间效率很高随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省。
集合表示和元素查询
集合表示:
利用位数组表示集合。初始状态下,Bloom Filter是一个包含m位的位数组,每一位都置为0 ;
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
为了表达S= {x1,x2…,xn}这样包含n个元素的集合,Bloom Filter使用 k 个相互独立的哈希函数(Hash Function),它们分别将集合中的每个元素映射到{1,…,m}的范围中。对任意一个元素 x ,第 i 个哈希函数映射的位置 hi(x) 就会被置为 1 (1≤i≤k)。注意,如果一个位置多次被置为1,那么只有第一次会起作用,后面几次将没有任何效果。在下图中,k=3,且有两个哈希函数选中同一个位置(从左边数第五位)。
这里写图片描述
在判断 y 是否属于这个集合时,我们对 y 应用 k 次哈希函数,如果所有 hi(y) 的位置都是 1(1<=i <=k),那么我们就认为 y 是集合中的元素,否则就认为 y 不是集合中的元素。下图中 y1 就不是集合中的元素,y2 或者属于这个集合,或者刚好是一个 false positive
这里写图片描述
错误率估计:
Bloom Filter在判断一个元素是否属于它表示的集合时会有一定的错误率(false positive rate),下面我们就来估计错误率的大小。在估计之前为了简化模型,我们假设 kn

0 0
原创粉丝点击