我需要一个用于查找表的哈希函数,因此,如果我的值是从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/