考虑标准 Murmurhash,给出 32 位输出值。
假设我们将其应用于 32 位输入——是否存在冲突?
换句话说,当应用于 32 位输入时,Murmurmash 是否基本上对排列进行编码?如果存在冲突,谁能举个例子(扫描随机输入没有产生任何结果)?
考虑标准 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;
}
如果不是,那么您需要更好地说明您的意思。
对于上述情况,没有冲突(两个不同的输入不会产生相同的输出)。只有一个条目返回输入值:0。
由于没有“那么多”的 32 位值,因此您实际上可以在几分钟内遍历所有这些值以进行验证。这将需要一些内存来存储位字段,但仅此而已。
顺便说一句,还有一种反转函数的方法(从输出中获取输入)。