【发布时间】:2011-07-11 20:30:32
【问题描述】:
在 BloomFilter 的上下文中,我有以下问题。 BloomFilters 需要有k 独立的哈希函数。我们称这些函数为h1, h2, ... hk。在这种情况下,独立意味着当应用于同一集合时,它们的值几乎没有相关性(希望为零)。请参阅 http://en.wikipedia.org/wiki/Bloom_filter 的算法说明(当然,您已经完全了解该页面了 :)。
现在,假设我想使用一些 n 位(如果您必须知道,来自加密函数,但它与问题无关)来定义我的哈希函数,它们彼此独立。如果你想要更多的上下文,你可以阅读http://bitworking.org/news/380/bloom-filter-resources,它正在做类似的事情。
例如,假设我想将每个 h 定义为(请原谅我的伪代码):
bytes = MD5(value)
h1 = bytes[0-3] as Integer
h2 = bytes[4-7] as Integer
h3 = bytes[8-11] as Integer
...
当然,我们很快就会用完散列函数。在这个 MD5 示例中,我们只得到了四个。
一种可能性是让散列函数相互重叠,而不要求四个字节是连续的。这样我们就有了许多哈希函数作为字节数组允许的排列。为简单起见,如果我们按以下方式定义哈希函数会怎样:
bytes = MD5(value)
h1 = bytes[0-3] as Integer
h2 = bytes[1-4] as Integer
h3 = bytes[2-5] as Integer
...
很容易看出,在 MD5 的情况下,现在我们有 12 个散列函数而不是 4 个。
最后,我们来到THE问题。这些散列函数是独立的吗?谢谢!
更新:我决定尝试从实际的角度来回答这个问题,所以我创建了一个小程序来测试这个假设。见下文。
【问题讨论】:
标签: statistics correlation bloom-filter