小编der*_*an7的帖子

如何创建自定义 Murmur Avalanche 混合器?

我正在尝试使用 Avalanche 混合器来散列整数坐标。我一直在使用Murmur3 的32 位和 64 位雪崩混合器来执行此操作(而不是实际的总哈希函数)。对于我的应用程序,不需要整个哈希函数,只需要此处看到的 Avalanche Mixer:

uint32_t murmurmix32( uint32_t h )
{
  h ^= h >> 16;
  h *= 0x85ebca6b;
  h ^= h >> 13;
  h *= 0xc2b2ae35;
  h ^= h >> 16;

  return h;
}


uint64_t murmurmix64( uint64_t h )
{
  h ^= h >> 33;
  h *= 0xff51afd7ed558ccdULL;
  h ^= h >> 33;
  h *= 0xc4ceb9fe1a85ec53ULL;
  h ^= h >> 33;

  return h;
}
Run Code Online (Sandbox Code Playgroud)

这些在我的机器上出现得很快,我将两个 uint32_t 混合到这些函数中以产生雪崩的结果,这会产生我喜欢的伪随机分布。

我想向这个系统引入更多坐标(即 z 和 w),所以我想使用更大的雪崩混合器来散列我的坐标。我相信出于我的目的,我希望看到函数本身产生的最大值是 uint64_t,碰撞本身不是问题,但结果的随机性是问题。

murmur3 …

c++ random hash murmurhash

5
推荐指数
1
解决办法
881
查看次数

标签 统计

c++ ×1

hash ×1

murmurhash ×1

random ×1