Function 有一个温和的散列函数教程吗?

Function 有一个温和的散列函数教程吗?,function,hash,language-agnostic,Function,Hash,Language Agnostic,令人尴尬的是,选择一个散列函数(比如,对字符串或整数集进行散列)对我来说仍然很神奇:这里取一些素数,那里取一些神奇的常数,做一些位移位,对一些东西进行模运算,然后就完成了 关于创建散列函数,有没有一个好的、温和的、平易近人的教程 您可以在(还讨论了哈希函数)上找到一个像样、简单的哈希教程。请注意,如果您进行网络搜索,您可以找到很多好信息 维基百科有一些关于和的基本信息 编辑 此前曾提出过类似的问题:。问题和答案都很好。奇怪的是,要找到散列算法的基本解释有多难。也许这个主题太难了,所以做一个基础教

令人尴尬的是,选择一个散列函数(比如,对字符串或整数集进行散列)对我来说仍然很神奇:这里取一些素数,那里取一些神奇的常数,做一些位移位,对一些东西进行模运算,然后就完成了


关于创建散列函数,有没有一个好的、温和的、平易近人的教程

您可以在(还讨论了哈希函数)上找到一个像样、简单的哈希教程。请注意,如果您进行网络搜索,您可以找到很多好信息

维基百科有一些关于和的基本信息

编辑


此前曾提出过类似的问题:。问题和答案都很好。

奇怪的是,要找到散列算法的基本解释有多难。也许这个主题太难了,所以做一个基础教程并不容易。我自己也在找,遇到了同样的问题

但是你可以试试这个页面。最酷的是,当你看完这一页后,在底部有一个文本框。如果向该框中添加文本并提交表单,则结果将是一个逐步列表,显示如何对输入文本进行哈希处理

祝你好运。如果你发现有更好的,如果你把它贴在这里会非常有帮助。

从这里开始,在下面突出显示一些概述部分

什么是好的哈希函数

大多数好的散列函数都是通过计算除以表大小N后的余数来工作的

这总是给出一个介于0和N-1之间的值,因此它是合适的,但是如果N是一个素数,那么它也非常适合在表中分散数据。当然,如果您有一个要散列的文本值,您首先必须将其转换为合适的数值,而像示例中那样的简单方案则不行

您需要为每个可能的文本值生成不同的数值,将前两个字母的ASCII码相加显然不起作用。更好的方法是根据字母位置对每个ASCII码进行加权,第一个字符乘以1,第二个字符乘以10,第三个字符乘以100,依此类推。。在将它们相加以得到单个值之前


一般来说,构建一个真正好的散列函数是困难的,在大多数情况下,您需要找到一个具有良好属性且经过良好测试的散列函数

问题是关于哈希函数,而不是哈希表。Wikipedia哈希函数页面远不是一个好的教程。发布链接是不够的。请确保您的答案在没有链接的情况下也是有用的,例如引用链接页面中的相关部分。想象一下,如果这个链接在未来中断,会发生什么。谢谢。我会记住的。编辑答案,突出我发现有用的部分。