我需要一个查找表的哈希函数,这样如果我的值是从 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
质数,以获得最佳分布。
请注意,这对某些类型的分布很敏感 - 例如,只是做x mod n
主要依赖于低位比特的随机性;如果它们在你的集合中不是随机的,你将会得到相当大的偏差。
Bob Jenkins 设计了几个非常好的哈希函数;这是专门设计的一个易于在硬件中实现的方案:http://burtleburtle.net/bob/hash/nandhash.html
对于许多不同的哈希函数、设计讨论等,请参阅网站的其余部分:http://burtleburtle.net/bob/hash/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)