首页 > 代码库 > 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)就会被置为1(1≤i≤k)。
注意,如果一个位置多次被置为1,那么只有第一次会起作用,后面几次将没有任何效果。
Bloom Filter