0

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

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

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

4

1 回答 1

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 位值,因此您实际上可以在几分钟内遍历所有这些值以进行验证。这将需要一些内存来存储位字段,但仅此而已。

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

于 2021-07-13T16:09:34.727 回答