0

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

根据 Wikipedia 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对于获得理论上的误报率是正确的?

注意:这里似乎已经提出了这个问题:使用固定数量的函数,在给定误报概率的情况下,我如何计算布隆过滤器的大小?但没有与我的确切问题相匹配的答案。 我的布隆过滤器需要多少个哈希函数?可能很有趣,但又不完全相同。

问候

4

1 回答 1

0

m – 位数组中的元素数 n – 集合中的项目数 p – 误报概率 // 0.0 – 1.0 ^ – 幂

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

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

于 2014-06-05T23:00:05.387 回答