布隆过滤器:如何找到k哈希函数?

时间:2011-09-29 09:07:23

标签: hash bloom-filter

布隆过滤器需要k个散列函数,它返回0到m之间的值(m是位数组的长度)。 我必须实现这样的布隆过滤器,我已经阅读了一些关于那些过滤器的理论文章(它们如何工作,你需要多少哈希函数,错误行为如何等等)。

现在我有两个关于哈希函数的问题:

  • 如何找到k个哈希函数 - 我应该使用哪个哈希函数?
  • 如何找到返回0到m之间值的哈希函数?或者,如何将散列函数的输出映射到范围0-m?

5 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

您可以使用加密哈希函数(如MD5或SHA)一次获取一堆哈希值。将加密哈希值除以 N m位片段,并像处理 N 正常哈希函数的输出一样处理它们。

答案 2 :(得分:0)

  • 应该使用的k个哈希函数的特征是
    在维基百科页面上给出:Bloom Filter并进入 算法描述它所说的 - 设计k个不同的独立散列函数的要求......

  • 有关通用哈希的优秀教程:Nice MIT lecture

答案 3 :(得分:0)

U可以使用任何哈希函数....网络中有许多哈希简单哈希函数。 请参阅http://en.wikipedia.org/wiki/List_of_hash_functions

使用任何哈希函数来获取哈希值,并且为了使其在0-m的范围内,请使用模数(%)运算符。 即bitlocation = hash%m;

它可能效率不高,但它有效......

答案 4 :(得分:0)

您可以使用Kirsch-Mitzenmacher optimization

hash_i = hash1 + i * hash2

其中hash1是32位,hash2是32位。外观上,您可以使用:

hash1 = upper 32 bit of a 64 bit hash
hash2 = lower 32 bit of a 64 bit hash
hash = hash1
for(int i=0; i<k; i++) {
    hash += hash2
}