应用Bloom Filter的几个小技巧

转自:http://blog.csdn.net/jiaomeng/article/details/1497361

应用Bloom Filter的几个小技巧

焦萌 2007129

 

下面列举几个基于标准Bloom Filter的小技巧:

 

1.         求两个集合的并。假设有两个Bloom Filter分别表示集合S1S2,它们位数组的大小相同且使用同一组哈希函数,那么要求表示S1S2并集的Bloom Filter,只要将S1S2的位数组进行“或”操作即可得到结果。

 

2.         Bloom Filter“对折”。如果想将一个Bloom Filter的大小缩小一半,那么只需将Bloom Filter的位数组分成两半进行“或”操作,得到的结果即为所求。在查找某一元素时,需要将哈希后的索引地址的最高位屏蔽掉。

 

3.         通过0的数目估计集合元素个数。在第一篇文章Bloom Filter概念和原理中,我们提到过:位数组中0的比例非常集中地分布在它的数学期望值m (1 - 1/m)kn的附近,其中m为位数组的大小,k为哈希函数的个数,nBloom Filter所表示集合的元素个数。根据上式,知道了0的个数就可以很容易推断n的大小。

 

4.         通过内积估计集合交集元素个数。假设有两个Bloom Filter分别表示集合S1S2,它们位数组的大小相同且使用同一组哈希函数,下面我们来看第i位在两个Bloom Filter同时被置为1的概率。要让某一位同时被置为1,只有两种可能:要么它是被S1∩S2中的元素设置的,要么分别是被S1 – (S1∩S2)S2 - (S1∩S2)中的元素设置的。因此第i位在两个Bloom Filter同时被置为1的概率为:

|S|表示S中元素的个数,k表示哈希函数的个数,m表示位数组的大小。经过化简,再乘以m,得到两个位数组内积的数学期望值为:

如果不知道|S1||S2|,可以用3中的方法根据0的个数估计出它们的大小。最后,根据上式,我们在知道内积的情况下就可以很容易推断| S1∩S2|的大小。

 

5.         表示全集。很简单,将位数组设为全1就可以表示全集了,因为查找任何一个元素都会得到肯定的结果。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值