mod prime是否足以作为C

时间:2015-05-13 08:55:15

标签: c hashtable hash-function

我需要一个尽可能高效的哈希函数,用于使用探测(开放寻址)进行冲突解决的哈希表(实际上是一个哈希集)。存储在表中的条目都是4字节的整数,它们在该范围内采用随机值。

我正在考虑比djb2更快的东西,比如

value mod LARGE_PRIME

然后用我的水桶尺寸再次修改它。我认为这个素数必然大于我的桶大小,这意味着我对我的桌子有多大的增长也有某种理智限制(它可能永远不会超过256个条目)。

我不需要哈希函数的任何加密方面 - 只要它不是非常容易发生碰撞,它应该可以正常工作。

这会成为一个好的哈希函数吗?每次调整大小以改进它时,我可以为哈希表容量定义一个特定的算法吗?

1 个答案:

答案 0 :(得分:3)

正确的哈希函数归结为您正在散列的数据:您的值是多少随机?如果您的值均匀分布在范围内,并且范围远大于散列桶的数量,那么只需使用

value MOD number_of_buckets

将是一个合理的哈希函数 - 添加MOD <prime>实际上不会给你带来太大的影响,实际上可能会使哈希更糟糕(因为某些存储桶会被低估或过度使用更多比他们本来原来的那样。)

Primes并不神奇 - 它们有时可以用来“平滑”#34;由于常见因素导致的相关效应,但如果你没有开始那些相关性,没有它们你可能会更好 - 特别是如果速度是最重要的!