Bloom Filter原理

来源:互联网 发布:金融数据挖掘 马超群 编辑:程序博客网 时间:2024/06/05 00:49

布隆过滤器(Bloom Filter,简称BF)是用来检测某个元素是否是大数据集合的成员的一个有效方法,具有很好的空间和时间效率。

BF是一个二进制向量数据结构,可以理解为有m个抽屉的桌子。

设计一个BF需要有3个功能部件:(1)有n个元素的集合M;(2)长度为m的位数组(BF结构);(3)k个哈希函数。


初始状态:位数组各位都为0,即每个抽屉都是空的。

实现过程:依次取集合M中的元素,例如a,计算hi(a)=x ,其中1<= i <=k,1<= x <=m,并将位数组的第x位设置为1.

                   可见:对每一个元素,都使用了k个哈希函数对其进行了计算,并将相应的抽屉都设置为1。

如何判断:元素b是否在位数组中?对b,使用hi(b)=x ,其中1<= i <=k,并查看第x个抽屉是否为1。

                  如果有一个抽屉不为1,即可知道b不在集合M中;反之,表明b在M中。


误判:元素不在集合M中,但通过BF判断其在M中。

漏判:如果元素在集合M中,则通过BF判断其一定在M中。

注意:BF会产生误判,但不会发生漏判。


产生误判的原因:因为位数组中很多位都被设置成了1,使得通过哈希函数产生的数对应的位数都为1。

影响误判的因素:(1)位数组长度,位数组越长,使得剩余0的个数会越多,产生误判的概率越小;

                                 (2)集合M的元素个数n,n越大,使得位数组各位产生1的概率增大,产生误判的概率随之增大;

                                 (3)哈希函数的数量。


0 0
原创粉丝点击