【发布时间】:2023-03-30 06:37:01
【问题描述】:
我听说,例如,MurmurHash2 不是“增量的”,但 MurmurHash3 是增量的。这是什么意思?为什么有用?
【问题讨论】:
我听说,例如,MurmurHash2 不是“增量的”,但 MurmurHash3 是增量的。这是什么意思?为什么有用?
【问题讨论】:
增量散列函数适用于如果先前 散列消息,M 稍微更新为新消息,M*,然后它 计算更新的哈希值应该相当快 消息,M*。这是通过从旧哈希计算新哈希 m* 来完成的 哈希值 m,与传统的哈希函数相比 从头开始重新计算新的哈希 m*,这需要更长的时间。
http://www.cs.berkeley.edu/~daw/papers/inchash-cs06.pdf
它们之所以有用,是因为它们更容易计算,因此在计算能力和时间方面成本更低。
但是,它们并不适合所有情况。伯克利的那篇论文有一些很好的例子,说明它们何时可以在引言部分有用。
【讨论】:
我不是这方面的专家,但我认为 MurmurHash3 并不是 tommarshall 所描述的意义上的增量。
当人们将其描述为增量时,他们可能意味着您可以在 O(1) 内存中计算流的哈希值,即您可以拥有一个 API,让您可以执行以下操作(在伪代码中):
x = Hasher()
x.add("hello ")
x.add("world!")
x.get_hash()
这将产生字符串“hello world”的哈希值,而不会在任何时间点将整个字符串保存在内存中。
特别是,imurmurhash-js javascript 包似乎在此含义中使用了“增量”一词。
MetroHash docs 中似乎使用了相同的含义。
【讨论】: