第8章 散列.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 散列

第8章 散列 字典与符号表 把字典作抽象数据型时,使用术语符号表(symbol table)表示 符号表上的操作 查找 获取名字属性 修改名字属性 插入一个新名字 删除一个名字及其属性 最基本的操作是查找、插入、删除 二叉树的最坏时间复杂度是O(n),第10章二叉查找树的改进可以达到O(logn) 如何具有良好的期望性能? 散列技术(hashing)----拓展补充王小云教授故事 例 一组数:12,37,52,43,84,99 散列函数为:H(k)=k%11 散列表: 长度为11 * * 8.1 ADT符号表 8.2.1 散列表: 采用散列技术将记录存储在一块连续的存储空间中,这块连续的存储空间称为散列表。 8.2 静态散列 关键码集合 ki ri H(ki) …… …… H 散列表 数组 将关键码映射为散列表中适当存储位置的函数。 8.2.2散列函数 散列表 关键码集合 ki ri H(ki) …… …… H 散列函数 数组 散列地址:由散列函数所得的存储位置 。 散列表 关键码集合 ki ri H(ki) …… …… H 散列函数 散列地址 下标 数组 10 9 8 7 6 5 4 3 2 1 0 12 37 52 43 84 99 散列技术的关键问题: ⑴ 散列函数的设计。 计算简单、均匀、存储利用率高的散列函数。 ⑵ 冲突的处理。如何采取合适的处理冲突方法来解决冲突。 冲突:对于两个不同关键码ki≠kj,有H(ki)=H(kj),即两个不同记录需要存放在同一个存储位置,ki和kj相对于H称同义词。 ri 关键码集合 ki …… …… H(ki) kj H(kj) 对关键码平方后,按散列表大小,取中间的若干位作为散列地址(平方后截取)。 1、散列函数——平方取中法 事先不知道关键码的分布且关键码的位数不是很大。 适用情况: 例:散列地址为2位,则关键码123的散列地址为: (1234)2=1522756 散列函数为: H(key)=key mod p 2、散列函数——除留余数法 如何选取合适的 p,产生较少同义词? 一般情况,选p为小于或等于表长(最好接近表长)的最小素数。 适用情况? 除留余数法是一种最简单、也是最常用的构造散列函数的方法,并且不要求事先知道关键码的分布。 将关键码从左到右分割成位数相等的几部分,将这几部分叠加求和,取后几位作为散列地址。 3、散列函数——折叠法 例:设关键码为2 5 3 4 6 3 5 8 7 0 5,散列地址为三位。 2 5 3 4 6 3 5 8 7 + 0 5 ─── 1 3 0 8 移位叠加 2 5 3 3 6 4 5 8 7 + 5 0 ─── 1 2 5 4 间界叠加 适用情况: 关键码位数很多,事先不知道关键码的分布。 根据关键码在各个位上的分布情况,选取分布比较均匀的若干位组成散列地址。 例:关键码为8位十进制数,散列地址为2位十进制数 8 1 3 4 6 5 3 2 8 1 3 7 2 2 4 2 8 1 3 8 7 4 2 2 8 1 3 0 1 3 6 7 8 1 3 2 2 8 1 7 8 1 3 3 8 9 6 7 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ 4 散列函数——数字分析法 1、处理冲突的方法——开放定址法 由关键码得到的散列地址一旦产生了冲突,就去寻找下一个空的散列地址,并将记录存入。 如何寻找下一个空的散列地址? 8.2.3 溢出处理 (1)线性探测法 (2)二次探测法 (3)随机探测法 (1)线性探测法 当发生冲突时,从冲突位置的下一个位置起,依次寻找空的散列地址。 对于键值key,设H(key)=d,闭散列表的长度为m,则发生冲突时,寻找下一个散列地址的公式为: Hi=(H(key)+di) % m (di=1,2,…,m-1) 例:关键码集合为 {47, 7, 29, 11, 16, 92, 22, 8, 3},散列表表长为11,散列函数为H(key)=key mod 11,用线性探测法处理冲突,则构造的散列表为: 0 1 2 3 4 5 6 7 8

文档评论(0)

jyf123 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6153235235000003

1亿VIP精品文档

相关文档