布隆过滤器(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)哈希函数的数量。