Murmurhash 在 32 位输入上是否有冲突?

Does Murmurhash have collisions on 32-bit inputs?

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

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

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

我假设您指的是 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;
}

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

对于以上内容,没有冲突(两个不同的输入不会产生相同的输出)。只有一个条目 returns 输入值:0.

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

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