首页 > 代码库 > Bloom Filter

Bloom Filter

 

 

 

Bloom Filter

是一个判断元素是否存在集合的快速的概率算法

它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。

Bloom Filter有可能会出现错误判断,但不会漏掉判断。也就是Bloom Filter判断元素不再集合,那肯定不在。如果判断元素存在集合中,有一定的概率判断错误。

 

优点

空间效率和查询时间都远远超过一般的算法

缺点

是有一定的误识别率和删除困难。

 

 

http://blog.csdn.net/hguisu/article/details/7866173 

Hash table的数据结构,运用一个足够好的Hash函数将一个元素映射到二进制位数组(位图数组)中的某一位。如果该位已经被置为1,那么表示该元素已经存在。

      Hash存在一个冲突(碰撞)的问题,用同一个Hash得到的Hash值有可能相同。为了减少冲突,我们可以多引入几个Hash,如果通过其中的一个Hash值我们得出某元素不在集合中,那么该元素肯定不在集合中。只有在所有的Hash函数告诉我们该元素在集合中时,才能确定该元素存在于集合中。这便是Bloom-Filter的基本思想。

 

原理要点:一是位数组, 而是k个独立hash函数。

 

1)位数组:

        假设Bloom Filter使用一个m比特的数组来保存信息,初始状态时,Bloom Filter是一个包含m位的位数组,每一位都置为0,即BF整个数组的元素都设置为0

 

2)添加元素,k个独立hash函数

 

       为了表达S={x1, x2,,xn}这样一个n个元素的集合,Bloom Filter使用k个相互独立的哈希函数(Hash Function),它们分别将集合中的每个元素映射到{1,,m}的范围中。

         当我们往Bloom Filter中增加任意一个元素x时候,我们使用k个哈希函数得到k个哈希值,然后将数组中对应的比特位设置为1。即第i个哈希函数映射的位置hashi(x)就会被置为11ik)。

 注意,如果一个位置多次被置为1,那么只有第一次会起作用,后面几次将没有任何效果。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bloom Filter