【问题标题】:What does it mean for a hash function to be incremental?散列函数是增量的意味着什么?
【发布时间】:2023-03-30 06:37:01
【问题描述】:

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

【问题讨论】:

    标签: hash hashtable


    【解决方案1】:

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

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

    它们之所以有用,是因为它们更容易计算,因此在计算能力和时间方面成本更低。

    但是,它们并不适合所有情况。伯克利的那篇论文有一些很好的例子,说明它们何时可以在引言部分有用。

    【讨论】:

    • 谢谢!病毒示例很棒(来自论文)。
    • 我对这个答案感到困惑。该问题具体询问 MurmurHash3 在什么意义上是增量的,但我不认为它在答案中描述的意义上是增量的。也许我只是不知道如何。
    【解决方案2】:

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

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

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

    这将产生字符串“hello world”的哈希值,而不会在任何时间点将整个字符串保存在内存中。

    特别是,imurmurhash-js javascript 包似乎在此含义中使用了“增量”一词。

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

    【讨论】:

    • 或许应该叫“流哈希”。
    猜你喜欢
    • 2010-09-14
    • 2017-11-05
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 2015-12-24
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多