哈希函数是增量的意味着什么?

时间:2012-09-07 20:10:11

标签: hash hashtable

我听说过,例如,MurmurHash2不是“增量”,而是MurmurHash3是增量的。这是什么意思?为什么它有用?

2 个答案:

答案 0 :(得分:7)

  

增量散列函数适用于以前的情况   哈希消息,M略微更新为新消息,M *,然后它   应该相当快地计算更新的哈希值   消息,M *。这是通过计算旧的哈希值m *来完成的   哈希值m,与必须的传统哈希函数形成对比   从头开始重新计算新的哈希值m *,这需要更长的时间。

http://www.cs.berkeley.edu/~daw/papers/inchash-cs06.pdf

它们非常有用,因为它们更容易计算,因此在计算能力和时间方面更便宜。

然而,他们并不适合所有情况。来自伯克利的那篇论文有一些很好的例子,说明它们何时在“引言”部分有用。

答案 1 :(得分:3)

我不是这方面的专家,但我认为MurmurHash3在tommarshall描述的意义上并不是增量的。

当人们将其描述为增量时,他们可能意味着您可以在O(1)内存中计算流的哈希值,即您可以使用API​​来执行以下操作(在伪代码中):

x = Hasher()
x.add("hello ")
x.add("world!")
x.get_hash()

这将产生一个字符串" hello world"不要在任何时间点将整个字符串保留在内存中。

特别是,imurmurhash-js javascript包似乎使用了' incremental'就是那个意思。

MetroHash文档中似乎使用了相同的含义。