- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
哈希算法简介
哈希算法简介
目录
1 哈希算法概念 2
2 哈希函数 3
3 冲突的解决方法 3
4 哈希算法应用 4
哈希算法简介
关键词:
算法、哈希、 c语言
摘 要:
哈希算法在软件开发和 Linux 内核中多次被使用,由此可以见哈希算法的实用性和重要性。本
文介绍了哈希算法的原理和应用,并给出了简略的代码实现,以便读者理解。
第 1 页 共 7 页
哈希算法简介
1 哈希算法概念
哈希(hash 散列,音译为哈希 )算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二
进制值称为哈希值。
哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字
母,随后的哈希算法都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所
以数据的哈希值可以检验数据的完整性。
哈希表是根据设定的 哈希函数 H(key) 和处理冲突方法将一组关键字映象到一个有限的地址区间上, 并以
关键字在地址区间中的项作为记录在表中的存储位置,这种表称为 哈希表 ,所得存储位置称为哈希地址。作
为线性数据结构与表格和队列等相比,哈希表无疑是查找速度比较快的一种。
查找一般是对项的摸个部分(及数据成员)进行,这部分称为键( key )。例如,项可以由字符串作为键,
附带一些数据成员。
理想的哈希表数据结构只不过是一个包含一些项的具有固定大小的数组。
通常的习惯是让项从 0 到 TableSize-1 之间变化。
将每个键映射到 0 到 TableSize-1 这个范围中的某个数 ,
并且将其放到适当的单元中,这个映射就称为散列函数( hash
funciton )。
如右图,john 被散列到 3 ,phil 被散列到 4,dave 被散列到 6,
mary 被散列到 7.
这是哈希的基本思想。剩下的问题则是要选择一个函数,决
定当两个键散列到同一个值的时候(称为冲突) ,应该做什么。
第 2 页 共 7 页
哈希算法简介
2 哈希函数
通常,键是字符串,一种选择方法是把字符串中字符 ASCII 码值加起来。
unsigned int hash( const char * key, int tableSize)
{
unsigned int hastV al = 0;
for( int i = 0; i strlen(key); i++)
hashVal += key[ i ];
return hashVal % tableSize;
}
通过对 ASCII 码总和取 tableSize 的余数,来确定哈希值。
这是个简单的示例,实现起来很简单而且能够很快地算出答案。不过,如果表很大,则函数不
会很好地分配键。由于 ASCII 字符的值最多为 127,如果输入的 key ,都是长度比较小的字符串,那
么返回的键值(哈希值)就会集中在哈希表的头部,这样就会分配不均匀。好的哈希算法这部分会
非常复杂, 这里仅仅做个介绍。 在下面的哈希算法应用中会介绍 linux 内核如何
原创力文档


文档评论(0)