Scalable Bloom Filter

前面提到了Bloom Filter用于存储并且搜索数据,但是前提是可以估计出插入的元素大小n,从而得到k和m。但是如果是动态插入元素,无法预知n的大小时,还采用标准的Bloom Filter将导致bit数组趋近于满负荷,会导致哈希函数的冲突显著增加,最直接的影响就是false positive显著上升。而Scalable Bloom Filter(SBT)就是为了解决这个问题,保证Bloom Filter的总的false positive保持在一定的可接受范围内,不至于无限制增加。

Scalable Bloom Filter是对标准的Bloom Filter的扩展,SBT由多个标准的Bloom Filter组成。初始的时候,SBT只有一个标准的Bloom Filter(BF0),它的false positive为P0,哈希函数个数为K0。将SBT的最后一个Bloom Filter记做BFi,那么当BFi被填满的时候(填充达到1/2),将新的BFi+1添加到SBT中。添加的规则是:false positive Pi+1 = Pi * r,哈希函数个数为Ki+1。

假设,当前Bloom Filter的总个数为l。此时,一连串的Bloom Filter的false positive为P0,P0 * r,P0 * r ^ 2, P0 * r ^ 3 ...... ,P0 * r ^ (l - 1)。那么混合的false positive(SBT的false positive)为,


根据下面的公式,


可以得出false positive的上届,


所以可以得出,


由于k = (m/n) * ln2,同时m= ( -n * lnp ) / (ln2 * ln2),所以k = - lnp  / ln2。

所以可以推出,


同时,


为了使每一个k都是正整数,先假设r = 1 / 2。然后将r带入上面的公式,得到,


由于

可以得出, P0 = 1 / (2 ^ k0),则,


上面给出了综合false positive的上界2P0。


下面来看看每个Bloom Filter的大小以及可以存储的元素个数之间的关系。

SBT设置各个Bloom Filter的大小为m0,m0 * s,m0 * (s^2),......,m0 * (s ^ ( i -1))。为了方便计算,假设s = 2,也就是每添加一个Bloom Filter,新加入的都是它前面的Bloom Filter大小的2倍。

在这种情况下,可以得到SBT可以容纳的最大元素数(在保证bit位中0和1各占一半)为(2 ^ (i + 1 )- 1) * n0。其中n0表示第一个Bloom Filter中可以容纳的元素。

下面给出了证明的步骤:


前提:




证明:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值