使用工程的方法寻找哈希函数
本文作者的任务是找到一个性能最好的 hash function。稍微学过 CS 的人都知道 hash function 接受参数,返回 int 哈希值。我们希望这个返回值尽可能不碰撞,变一点值就会造成大量的 output bits 位翻转。作者不同于学院派,使用的方法是遍历尽可能多的组合,给一个组合打分,找到最优解。这就是他给 uint32_t 参数做哈希找到的最优解
uint32_t
prospector32(uint32_t x)
{
x ^= x >> 15;
x *= UINT32_C(0x2c1b3c6d);
x ^= x >> 12;
x *= UINT32_C(0x297a2d39);
x ^= x >> 15;
return x;
}
他给 uint64_t 找到的解跟目前正在 SplitMix64 中使用的解不相上下,也许大家都在用上最优解了吧。