令人尴尬的是,选择一个哈希函数(例如,对于散列字符串或整数集等)对我来说仍然是神奇的:在这里取一些素数,在那里使用魔术常量,做一些移位,模拟某些东西,然后完成。
是否有一个关于创建哈希函数的漂亮,温和且平易近人的教程?
答案 0 :(得分:16)
很奇怪找到哈希算法的基本解释是多么困难。也许这个主题非常难以制作基础教程并不容易。我自己在寻找一个并遇到同样的问题。
但你可以尝试这个页面。很酷的是,在您阅读完页面后,底部有一个文本框。如果您向该框添加文本并提交表单,则结果将逐步列出其如何对输入文本进行哈希处理。
http://www.metamorphosite.com/one-way-hash-encryption-sha1-data-software
祝你好运。如果你发现更好的东西,如果你在这里发布它会非常有用。答案 1 :(得分:3)
您可以在Hash Table Tutorial找到一个体面,简单的哈希教程(也讨论哈希函数)。请注意,如果您进行网络搜索,您可以找到很多有用的信息。
维基百科有关于Hash Tables和Hash Functions的一些基本信息。
修改强>
之前曾问过类似的问题:Which Hash Function Should I Choose。问题和答案非常好。
答案 2 :(得分:1)
从link开始,在下面突出显示概述
的部分什么是好的哈希函数
大多数优秀的散列函数通过计算除以表大小N后的余数来工作。
这总是给出介于0和N-1之间的值,因此它是合适的,但如果N是素数,那么它也很好地将数据分散到表中。当然,如果你有一个你想要散列的文本值,你首先必须将它转换为合适的数值,并且一个简单的方案就像示例中那样不会。
您需要为每个可能的文本值生成不同的数值,并且将前两个字母的ASCII代码加在一起显然不起作用。一种更好的方法是通过字母的位置对每个ASCII码进行加权,第一个字符乘以1,第二个字符加10,第三个字符加100,依此类推......然后将它们相加以得到单个值。
一般来说,构建一个非常好的哈希函数很困难,在大多数情况下,你需要找到一个具有良好属性并经过充分测试的哈希函数。