在实现布隆过滤器时,传统方法需要多个独立的哈希函数。 Kirsch和Mitzenmacher表明您实际上只需要两个,并且可以将其余部分作为线性组合生成。
我的问题是:两个散列函数和一个具有两倍熵的散列函数之间的区别是什么?
这是通过查看您对散列函数的输出实际执行的操作得出的:您将采用(例如)64位散列值并将其缩放为位向量的大小,该值可能明显小于2 64。显然,这是一种失去熵的转换(在极少数情况下,散列大小和过滤器容量完全一致)。假设我的过滤器具有少于2 个32个条目,那是什么使我无法将64位哈希值拆分为两个32位哈希并采用线性组合呢?还是用它来播种PRNG?
换句话说,为确保标准误报率成立,我实际上需要了解多少信息才能插入到Bloom过滤器中?或更笼统地说,我如何区分元素(使用多少位来描述元素)与Bloom过滤器的性能之间有什么关系?
似乎可以将位用于过滤器大小,或者等效地使用位来存储元素的误报概率为 ....