什么是int32的快速理想哈希函数?

时间:2015-11-19 22:31:34

标签: c optimization hash

我需要理想(无冲突)哈希函数来将int映射到相同大小的int。最简单的方法是交换一些位的位置,但也许有一些很好的快速实现,操作数量少,容易改变散列种子? 也许使用一些快速对称密码? x86有AES条指令。我不需要移植性,因此使用SSE或其他x86特定加速指令的内容会很棒吗?因为散列应该非常快。

2 个答案:

答案 0 :(得分:1)

uint32_t hash( uint32_t value )
{
    return( value * 0xdeece66d + 0xb );
}

答案 1 :(得分:1)

使用像FNV32-1A这样的简单哈希,你可能会得到更好的结果。

crc32clmulaes等复杂指令具有更高的吞吐量,但它们也可能具有更高的延迟。他们自己也不一定能给你更好的分配。

您应该考虑的其他事项之一是碰撞成本与散列函数。线性探针通常应该在合理数量的探针上运行良好,因为16个值将适合单个缓存线。通过预测缓存访问,CPU可能也能够隐藏访问成本。

还值得考虑的是占用率和桌子大小之间的权衡。有时,将表格大小加倍会更有效。