d-Left Counting Bloom Filter (5)

 

最后,我们将d-left counting bloom filter与标准的counting bloom filter作一比较。假设要表示的集合有m个元素,构造d-left counting bloom filter的各个参数如下:

1.         d-left哈希表包含4个子表;

2.         每个子表包含m/24bucket,使得bucket的平均负载是6个元素

3.         子表中每个bucket可以容纳8cell8个就能以很高的概率保证不会溢出;

4.         cell中每个counter包含2位,可以容纳4个相同的fingerprint;注意,我们必须给fingerprint设置一个表示空的状态,比如全0,这样才能用2counter表示4fingerprint

 

假设用r位表示fingerprint,那么false positive的概率就是24 · 2-r。其中两个fingerprint完全相同的概率为(1/2)r,又因d-left hashing使得查找时有4个选择(有4个子表),每个选择对应一个bucket,一个bucket平均负载是6,所以需乘以24。整个d-left counting bloom filter所需的所有位数为4m(r+2)/3。其中r+2表示一个cell的位数,m是集合元素个数,一个bucket能容纳8cell,但平均负载是6个,所以乘以4/3就得到全部的位数。

 

现在来看标准的counting bloom filter。假设对于m个元素的集合,counting bloom filter使用cmcounter,每个counter使用4位,哈希函数的个数k使用最优值cln2,得到false positive的概率为(2-ln2)c,总共使用4cm位。

 

如果令c = (r+2)/3,那么两种方法使用的位数相同,这时我们来比较一下false positive的概率。我们发现在r 7

(2-ln2)(r+2)/3 > 24 · 2-r

而且使用的位数越多,两个false positive概率的差距就越大。当r = 14时,c = 16/3,虽然两个结构使用的位数相同,但counting bloom filterd-left counting bloom filterfalse positive概率大了100倍以上。

 

现在换个角度,看看在false positive概率相同的情况下两者占用空间的情况。假设标准的counting bloom filter使用94位的counter(每个元素36位),6个独立的哈希函数,得到的false positive概率为0.01327d-left counting bloom filter使用11位的fingerprint(每个元素52/3位),得到的false positive概率为0.01172。我们计算一下,52/3÷36= 0.48,也就是说,d-left counting bloom filter只使用了counting bloom filter不到一半的空间,就得到了比counting bloom filter更低的错误率。

 

参考论文:An Improved Construction for Counting Bloom Filters

你可能感兴趣的:(c,filter,construction)