我听说过,例如,MurmurHash2不是“增量”,而是MurmurHash3是增量的。这是什么意思?为什么它有用?
答案 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文档中似乎使用了相同的含义。