Bloom Filter:评估误报率

时间:2013-04-11 15:15:29

标签: algorithm math data-structures probability bloom-filter

给定固定数量的比特(例如,时隙)(m)和固定数量的散列函数(k),如何计算理论误报率(p)?

根据维基百科http://en.wikipedia.org/wiki/Bloom_filter,对于误报率(p)和若干项目(n),所需的位数(m)由m = - n * l(p) / (l(2)^2)给出,并且最佳数量为哈希函数(k)由k = m / n * l(2)给出。

根据维基百科页面中给出的公式,我想我可以通过以下方法评估理论误报率(p):p = (1 - e(-(k * n/m)))^k

但维基百科有另一个公式(p):p = e(-m/n*(l(2)^2)),我认为,假设(k)是哈希函数的最佳数。

对于我的例子,我拿了n = 1000000m = n * 2,(k)的最佳值是1.386,根据前面的公式,理论假阳性率(p)将是0.382。 让我们选择函数的数量,计算给定固定(k)的理论误报率(p)并计算所需的理论位数(m'):

for k = 1, p = .393 and m' = 1941401
for k = 2, p = .399 and m' = 1909344
for k = 3, p = .469 and m' = 1576527
for k = 4, p = .559 and m' = 1210636

过滤器中填充的位越多,我们得到的误报就越多。似乎合乎逻辑。

但是,如果给定固定(k),(m)和(n)

,可以确认公式p = (1 - e(-(k * n/m)))^k是否正确以获得理论误报率?

注意:问题似乎已在此处提出:With fixed number of functions, how can I calculate the size of a Bloom Filter given the probability of false positives?但是没有与我的确切问题相符的答案。 How many hash functions does my bloom filter need?可能会引起人们的兴趣,但同样不一样。

此致

1 个答案:

答案 0 :(得分:1)

m - 位数组中的元素数 n - 集合中的项目数 p - 假阳性概率// 0.0 - 1.0 ^ - 力量

p = e ^( - (m / n)*(ln(2)^ 2));

我写了一篇关于Bloom Filters的数学友好教程: http://techeffigy.wordpress.com/2014/06/05/bloom-filter-tutorial/