您的位置:首页 > 理论基础 > 数据结构算法

Bloom Filter原理

2016-08-22 22:33 141 查看
布隆过滤器(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)哈希函数的数量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息