布隆过滤器哈希值:更多还是更大?


15

在实现布隆过滤器时,传统方法需要多个独立的哈希函数。 Kirsch和Mitzenmacher表明您实际上只需要两个,并且可以将其余部分作为线性组合生成。

我的问题是:两个散列函数和一个具有两倍熵的散列函数之间的区别是什么?

这是通过查看您对散列函数的输出实际执行的操作得出的:您将采用(例如)64位散列值并将其缩放为位向量的大小,该值可能明显小于2 64。显然,这是一种失去熵的转换(在极少数情况下,散列大小和过滤器容量完全一致)。假设我的过滤器具有少于2 个32个条目,那是什么使我无法将64位哈希值拆分为两个32位哈希并采用线性组合呢?还是用它来播种PRNG?

换句话说,为确保标准误报率成立,我实际上需要了解多少信息才能插入到Bloom过滤器中?或更笼统地说,我如何区分元素(使用多少位来描述元素)与Bloom过滤器的性能之间有什么关系?

似乎可以将位用于过滤器大小,或者等效地使用位来存储元素的误报概率为 ....2lg2lg-ñlnp-2lgln2ñp

Answers:


16

您应该从“产生的随机位”的角度来考虑哈希函数。因此,如果您具有产生64位哈希的哈希函数,则可以将其视为4个16位哈希(通过拆分),依此类推。

对于上述方案(应该归功于Dillinger和Manolios; Kirsch / Mitzenmacher刚刚进行了分析),这表示您是正确的;如果您具有位的单个哈希函数,则应该没问题。2lg


5
欢迎使用cstheory,迈克尔:)
Suresh Venkat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.