我需要一个用于查找表的哈希函数,因此,如果我的值是从0到N,则我需要一个哈希函数,它给我一个从0到n的值,即n <
我一直在研究不同的低成本哈希函数,但我发现只有以下几点:

h = z mod n  range(z) - 0 to N, range(h) - 0 to n

我的哈希函数需要在硬件中实现,因此它的成本非常低。除了那简单的事情之外,谁能推荐其他公式或算法?当我说硬件时,我指的是硬件中的真正实现,而不是微处理器中的指令。

谢谢你。

使用解决方案更新

感谢所有答案,我不会选择一个喜欢的答案,因为根据目标应用程序的特性,它们都同样有效。

最佳答案

规范形式是h(x) = (a*x + b) mod n,其中a和b是常量,n是哈希表的大小。您想要使n为质数,以获得最佳的(ish)分布。

请注意,这对某些类型的分布很敏感-例如,仅执行x mod n主要依赖于低序位的随机性;如果它们在您的集合中不是随机的,则您将获得相当大的偏斜。

鲍勃· Jenkins (Bob Jenkins)设计了几个非常好的哈希函数。这是专门设计为易于在硬件中实现的一种:
http://burtleburtle.net/bob/hash/nandhash.html

有关许多不同的哈希函数,设计讨论等,请参见网站的其余部分:http://burtleburtle.net/bob/hash/

10-08 19:01