网站大量收购独家精品文档,联系QQ:2885784924

[工学]东华大学数据结构第九章查找.ppt

  1. 1、本文档共115页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]东华大学数据结构第九章查找

* 9.3 哈希表 1.?开放定址法 为产生冲突的地址H(key)求得一个地址序列: H0, H1, H2, …, Hs 1≤s≤m-1 其中:H0 = H(key) Hi = ( H(key) + di ) MOD m i=1, 2, …,s 增量 di 有三种取法: (1)?线性探测再散列:di = c?i。最简单的情况 c=1 (2)?平方探测再散列:di = 12, -12, 22, -22, …, (3)?随机探测再散列:di 是一组伪随机数列 * 9.3 哈希表 注意:增量di应具有“完备性”。即:产生的Hi均不相同,且所产生的s(m-1)个Hi值能覆盖哈希表中所有的地址。则要求: ※ 平方探测时的表长m必为4j+3的质数; ※ 随机探测时的m和di没有公因子。 线性探测容易产生二次聚集,一次聚集的产生主要取决于哈希函数,在哈希函数均匀的前提下,可以认为没有一次聚集。 * 9.3 哈希表 线性探测: 假定采用的H函数为:H(key)= keyMOD11,关键字序列为:17、60、29、38 … * 9.3 哈希表 当散列 38 时发生冲突,同 60 争夺第 5 个单元 解决办法 :探测下一个空单元,步长:1 H(key) = ( key+di) MOD 11,其中:di 为 1、2……10 注意:可取其它步长,如 3 冲突: 初级冲突:不同关键字值的结点得到同一个散列地址。 二次聚集:同不同散列地址的结点争夺同一个单元。 结果:冲突加剧,最坏时可能达到 O(n)级代价。 * 9.3 哈希表 解决办法: 改变步长:选和 m 互质的数作为步长,如 3、5、7…… 如选步长为 5,用 H(key) = ( key+5) MOD 11 H(key) = ( key+ 5×2) MOD 11 H(key) = ( key+ 5×3) MOD 11 等进行下一个空的单元,直到找到为止。 随机地改变步长,如取步长序列:2,7,4,3,6,1,5,如用 H(key) = ( key+2) MOD 11 H(key) = ( key+7) MOD 11 H(key) = ( key+ 4) MOD 11 等进行探测下一个空的单元,直到找到为止。 * 9.3 哈希表 2.?再哈希法 出现冲突时,采用多个哈希函数计算散列地址,直到找到空单元为止。或者用另一个哈希函数作为步长进行探测,找到下一个空单元。 如:H1(key) = key MOD 11 H2(key) = ( key+ MOD 9)+1 示例:给出一组表项关键字{ 22, 41, 53, 46, 30, 13, 01, 67 }。散列函数为:H(x)=(3x) % 11。散列表为 HT[0..10],m = 11。因此,再散列函数为 RH(x) = (7x) % 10 +1。 Hi = ( Hi-1 + (7x) % 10 +1 ) % 11, i = 1, 2, ? * 9.3 哈希表 H0(22) = 0 H0(41) = 2 H0(53) = 5 H0(46) = 6 H0(30) = 2 冲突 H1 = (2+1) = 3 H0(13) = 6 冲突 H1 = (6+2) = 8 H0(01) = 3 冲突 H1 = (3+8) = 0 H2 = (0+8) = 8 H3 = (8+8) = 5 H4 = (5+8) = 2 H5 = (2+8) = 10 H0(67) = 3 冲突 H1 = (3+10) = 2 H2 = (2+10) = 1 * 9.3 哈希表 3.?链地址法 将所有哈希地址相同的记录都链接在同一链表中。链地址肯定不会产生二次聚集。 * 9.3 哈希表 4.?公共溢出区法: ?将发生冲突的结点都存放在一个公共溢出区内。 * 9.3 哈希表 四、哈希表的查找 查找过程和造表过程一致。假设采用开放定址处理冲突,则查找过程为: 对于给定值K, 计算哈希地址 i = H(K) 若r[i] = NULL 则查找不成功 若 r[i].key = K 则查找成功 否则 求下一地址Hi,直至 r[Hi] = NULL (查找不成功) 或 r[Hi].key = K (查找成功) 为止。 * 9.3 哈希表 ???//--- 开放定址哈希表的存

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档