您的位置:首页 > 其它

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。



添加元素

往数组中添加一个元素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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: