哈希算法介绍

哈希算法介绍

ID:39125043

大小:84.52 KB

页数:7页

时间:2019-06-25

哈希算法介绍_第1页
哈希算法介绍_第2页
哈希算法介绍_第3页
哈希算法介绍_第4页
哈希算法介绍_第5页
资源描述:

《哈希算法介绍》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、哈希算法简介哈希算法简介哈希算法简介目录1哈希算法概念22哈希函数33冲突的解决方法34哈希算法应用4哈希算法简介关键词:算法、哈希、c语言摘要:哈希算法在软件开发和Linux内核中多次被使用,由此可以见哈希算法的实用性和重要性。本文介绍了哈希算法的原理和应用,并给出了简略的代码实现,以便读者理解。第4页共7页哈希算法简介1哈希算法概念哈希(hash散列,音译为哈希)算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈

2、希算法都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个有限的地址区间上,并以关键字在地址区间中的项作为记录在表中的存储位置,这种表称为哈希表,所得存储位置称为哈希地址。作为线性数据结构与表格和队列等相比,哈希表无疑是查找速度比较快的一种。查找一般是对项的摸个部分(及数据成员)进行,这部分称为键(key)。例如,项可以由字符串作为键,附带一些数据成员。理想的哈希表数据结构只不过是一个包含一些项的具有固定大小的数组

3、。通常的习惯是让项从0到TableSize-1之间变化。将每个键映射到0到TableSize-1这个范围中的某个数,并且将其放到适当的单元中,这个映射就称为散列函数(hashfunciton)。如右图,john被散列到3,phil被散列到4,dave被散列到6,mary被散列到7.这是哈希的基本思想。剩下的问题则是要选择一个函数,决定当两个键散列到同一个值的时候(称为冲突),应该做什么。第4页共7页哈希算法简介2哈希函数通常,键是字符串,一种选择方法是把字符串中字符ASCII码值加起来。unsignedinthash(constchar*key,i

4、nttableSize){unsignedinthastVal=0;for(inti=0;i

5、做个介绍。在下面的哈希算法应用中会介绍linux内核如何使用哈希算法管理网络设备结构。3冲突的解决方法在使用哈希算法时,除了哈希函数之外,还需要注意的是冲突(两个键散列到同一个值的时候)的处理。常用的处理方式有分离链接法、线性探测、平方探测。由于线性探测和平方探测涉及到一些数学问题,本文就介绍分离链接法。分离链接法也比较简单,其做法为将散列到同一个值的所有元素保留到一个链表中。第4页共7页哈希算法简介如上图所示,所有哈希表项对应一个链表,这样只要将冲突项放入链表就行,当查找时先找到链表,然后在比较链表上项的键,得到想要的项,这个方法比较容易实现,但

6、是会增加查找的耗时,原来只需计算哈希值,现在增加了对链表项的比较功能。4哈希算法应用下面看看linux内核中网络设备,是怎么样通过设备名获取相应设备的net_device结构体。在这个过程中,使用了哈希算法,并且使用了分离链接法解决冲突的问题。使用哈希算法可以提高查询速度,如果使用链表,查询时需要逐一比较,效率低下。第4页共7页哈希算法简介dev_name_head为哈希表,保存了所有项的链表头。1<

7、较简单,但是清晰的展现哈希算法的架构,而且容易理解。哈希算法应用很多场景,比如管理组播MAC地址,文件系统,数据库,数据校验等等。有兴趣可以深入研究,可以拓宽编程思路。第4页共7页

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。