数据结构08散列幻灯片.pptVIP

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章 散列 主要内容 散列函数及其设计 1 冲突及其解决方法 2 散列表的设计 3 散列表的应用 4 教学要求 目标要求 ⑴理解散列的含义; ⑵理解散列函数的设计及冲突的解决方法; ⑶熟练掌握常用的散列表的算法; ⑷掌握 散列表的两个应用。 教学重点 散列函数的设计; 解决冲突的方法; 散列表的设计原则及常用算法。 教学难点 使用本章所学到的有关知识设计出应用问题的有效算法 8.1散列表和散列函数 8.1.1 散列表 用散列的方法存储数据的表称为散列表。散列表中数据的查找效率与表的规模无关,只与散列的方法有关。因此,散列表的关键在于散列设计。 例:将一组数(45,5,51,83,92,76,68,77)存储到散列表H中。 散列设计为:f(key)=mod(key,m) 散列表H 8.1散列表和散列函数 8.1.2 散列函数及其设计 1、直接定址法 存储与查找结点时不需对关键字进行比较或运算,效率最高,但对大规模的数据存储易 造成存储空间的浪费 散列函数:f (key)=key 散列函数:f (key)=mod (key,m) 设key为 2、除余法 3、折叠法 将分布不均匀的关键字聚集到一定范围的存储空间中,m一般取素数 虽然散列过程需要耗费很多时间,但常用于关键字数据项较长、位数较多时 x1x2x3x4x5x6x7x8x9 折叠 x3x2x1 x4x5x7 x9x8x7 y1y2y3 8.1散列表和散列函数 例 在大小为10的散列表中,存储关键字254136898741,468542205000, 564379504215,7483966338694,579546207589 每个关键字分三组,每组四位数 f(key)= mod (key ,7) 8.1.2 散列函数及其设计 第一步:折叠法 f (254136898741)=6619 f (468542205000)=0089 f (564379504215)=6539 f (748306630694)=9470 f (579546207581)=2452 第二步:除余法 f (6619)= 4 f (89)=5 f (6539)=1 f (9470)=6 f (2452)=2 实际应用中可以将常用的散列函数结合使用 折叠法后,这些关键字要如何存储到大小只有10 的散列表中呢? 8.2冲突 8.2.1 什么是冲突 不同数据经过散列后得到相同地址的现象称为关键字间发生了冲突 例:将一组数(45,5,50,83,94,76,68,79)存储到散列表H中。 运用除余法散列这组数 散列表H 0 1 2 3 4 5 6 7 8 9 10 m=11 45 5 50 83 94 76 68 79 冲突 8.2.2 解决冲突的常用方法 溢出表法 键表法 8.2冲突 采用链式结构设计散列表,所有冲突的结点构成一个链;用头指针指向链的首结点;所有的头指针存储为一个顺序表 仍然是一个散列表,当发生冲突时,寻找表中的空闲位置。寻找空闲位置的方法有:线性探测法和二次探测法 溢出表法 链表法 地址探测 法 在原表的基础上建立溢出表,存放产生冲突的关键字,两个表之间用“溢出链指针”链接 8.3散列表的设计 8.3.1散列表的设计原则 计算简单 均匀分布 冲突率小 散列表规模 8.3.2 常用的散列表算法 1、插入 2、查找 INSH1.[计算散列地址] i-mod (key,p) INSH2.[冲突否?] 若H[i]=-1,则H[i]-key,算法结束;否则d-1。 INSH3.[解决冲突] j-mod { ( i+d),p},若H[j]=-1,则H[i]-key,算法结束。 INSH4. [解决冲突] d=d+1,若dp 则转3 INSH3继续;否则算法失败。 SECH1.[散列] i-mod (key,p), d-0 SECH2.[查找] 若H[i]=key,则output(i),算法结束(成功); SECH3.[探测] d=d+1 ,若dp ,则i-mod { ( i+d),p} ,转SECH2继续;        否则output(-1),算法结束(失败)。 8.4散列应用之一——散列词汇表 散列方法对大规模数据进行存储与查找的效率较高。词汇表是一种用于存储大量词汇的线性表。 例 一个程序段进行编译,其中应用的标识符有:accounts,amount,code,key, fr,fn,gr,i,q,c,d,MergeFile,MINKEY,MAXKEY,Adjust,Creatloser,用散列表存储。 第一步:确定散列函数 第二步:冲突解决方法 第三步:确定表的规模 第四步:计算

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档