给定固定数量的比特(例如槽)(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 = 1000000
和m = 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
对于获得理论上的误报率是正确的?
注意:这里似乎已经提出了这个问题:使用固定数量的函数,在给定误报概率的情况下,我如何计算布隆过滤器的大小?但没有与我的确切问题相匹配的答案。 我的布隆过滤器需要多少个哈希函数?可能很有趣,但又不完全相同。
问候