BloomFilter
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)