【问题标题】:Does Murmurhash have collisions on 32-bit inputs?Murmurhash 在 32 位输入上有冲突吗?
【发布时间】:2021-09-21 20:12:20
【问题描述】:

考虑标准 Murmurhash,给出 32 位输出值。

假设我们将其应用于 32 位输入——是否存在冲突?

换句话说,当应用于 32 位输入时,Murmurmash 是否基本上对排列进行编码? 如果存在冲突,谁能举个例子(扫描随机输入没有产生任何结果)?

【问题讨论】:

    标签: hash probability hash-collision murmurhash


    【解决方案1】:

    我假设您的意思是 MurmurHash3,32 位,特别是 32 位 fmix 方法:

    FORCE_INLINE uint32_t fmix32 ( uint32_t h )
    {
      h ^= h >> 16;
      h *= 0x85ebca6b;
      h ^= h >> 13;
      h *= 0xc2b2ae35;
      h ^= h >> 16;
    
      return h;
    }
    

    如果不是,那么您需要更好地说明您的意思。

    对于上述情况,没有冲突(两个不同的输入不会产生相同的输出)。返回输入值的条目只有一个:0。

    由于没有“那么多”的 32 位值,您实际上可以在几分钟内遍历所有这些值以进行验证。这将需要一些内存来存储位域,但仅此而已。

    顺便说一句,还有一种方法可以反转函数(从输出中获取输入)。

    【讨论】:

    • 谢谢!是否知道这种方法没有冲突?除了尝试所有选项之外,还有其他方法可以证明吗?
    • 是的,我认为有一种方法可以证明这一点,但恐怕这超出了我的能力范围。另见this answer。我认为一般来说,如果有一种方法可以反转函数,则可以保证不会发生任何冲突。否则无法恢复。
    • 有道理,问题是他们如何验证反向函数(在这种情况下就是证明)。
    • 我使用蛮力验证了 :-)
    猜你喜欢
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 2023-03-31
    • 2012-12-22
    • 1970-01-01
    • 2016-03-30
    相关资源
    最近更新 更多