- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二十五讲 哈 希 表 查 找;8.3.1 哈希表的概念
在前面讲过的几种查找方法中,都是在结
构中查找记录时需要进行一系列和关键字的比
较。查找的效率依赖于查找过程中所进行的比
较次数。; 理想的情况是希望不经过任何比较,一次
存取便能够得到所查记录,那就必须在记录的
存储位置上和它的关键字之间建立一个确定的
对应关系f,使每个关键字和结构中一个唯一
的存储位置相对应。因而在查找时,只要根据;这个对应关系f找到给定值k的的映像f(k)。若
结构中存在关键字和k相等的记录,则必定在
f(k)的存储位置上,由此,不需要进行比较便
可直接取得所查记录。在此,我们称这个对应
关系f为哈希函数,按这个思想建立的表为哈
希表。
;而使用哈希表进行查找的方法称为哈希查找。
因此,其查找时间与计算地址的函数有关。
假设table是一个包含n个元素的线性表,Ri
为表中的某个元素(1=i=n),keyi是其关键
字值,若在关键字值keyi与元素Ri的地址(即
在线性表中的位置)之间建立某种函数关系,;则可以通过这个函数,把关键字值转换成相应
元素在表中的地址,即 Addr(Ri)=H(keyi)
其中,Addr(Ri)为Ri的地址,函数 H 称为哈希
(Hash)函数(散列函数), 称H(keyi) 的值为哈希地址(散列地址)。
;哈希查找的基本思想:
确定将关键字值转换成存储位置的函数
H,以记录中关键字值K为自变量,对应的函
数值H(K)作为其记录的存储地址将其存到
相应的位置中。查找时,通过函数H计算得到
待查找记录的存储位置。; 在进行查找之前,我们先来了解如何构造哈希表。例如:假定一个线性表为
S={18,75,60,43,54,90,46,67}
将其存储到数组H[13]中,如下图所示:; 若哈希函数定义为H(key)=key%13,则查找
过程就是一个求H(key)的值的过程,如查找
75,则H(75)=75%13=10,说明H[10]存放着
75。若查找90, H(90)=90%13=12,说明
H[12]存放着90。; 若根据哈希函数,把元素存放到线性表中相
应的位置上,这样形成的表便称为哈希表,又
叫散列表。哈希表的查找是以同样的方式进行
的。
若某个哈希函数对于不同的关键字值key1和
key2,得到相同的散列地址,;即H(key1)= H(key2),这种现象称为冲
突。例如:H(54)=H(67)=2,说明54和
67在存放时发生冲突,即54和67都要存放到
H[2]中,这就需要有办法来处理冲突,发生
冲突的关键字对该哈希函数H(key)来说称
为是同义词。
;; 综上所述,哈希表是根据设定的哈希函
数和解决冲突的方法,为一组元素建立一张
表,每个元素在表中的位置依赖于设定的哈
希函数和解决冲突的方法。
; 8.3.2 哈希函数的构造方法
构造哈希函数的方法很多,在讲述各种
方法之前,首先需要明确什么是“好”的哈希
函数。
若对于关键字集合中的任一个关键字,
经哈希函数映像到地址集合中任何一个地址
的概率是相等的,则称此类哈希函数为均匀;的(Uniform)哈希函数。换句话说,就是使
关键字经过哈希函数得到一个“随机的地址”,
以便使一组关键字的哈希地址均匀分布在整个
地址空间中,从而减少冲突。
;1、直接地址法(这种哈希函数叫做自身函数)
哈希函数H对于关键字是数字类型的元素,
直接利用关键字求得哈希地址。
H(key)=key
或 H(key)=a×key+b
在使用时,为了使哈希地址与存储空间吻合,可以调整a和b的值,a,b为常数。;地 址;分析:该方法计算简单,一个关键字对应一个
存储地址,不会产生冲突,这种方法适用于关
键字分布连续的情况,但在实际应用中有一定
的局限性。;若干位作为哈希地址,它要求可能出现的关键
字事先知道的情况。
例如:以下一组关键字由7位十进制构成。
; ① ② ③ ④ ⑤ ⑥ ⑦; 我们对关键字的每一位数字分析发现,第①② 位都是数字7和2;第③位的数字只取0和1;第⑤位的数字取0,1,2和3;第⑦位的数字取1和2,因此第①②③⑤⑦几位都不取,而第④⑥位的数字分布均匀。我们取④⑥ 两位数字为哈希地址。所有元素的哈希地址得出的结果如下:
H(k1)=56 H(k2)=14 H(k3)=23 ;H(k4)=20 H(k5)=35 H(k6)=41 ;3
原创力文档


文档评论(0)