算法与数据结构(C++语言版)(第2版)课件 第11章_散列表16:9.pptx

算法与数据结构(C++语言版)(第2版)课件 第11章_散列表16:9.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Data Structures and Algorithmsdesign | analyze | experiment | implement数据结构与算法第十一章 散列表 第四部分 集合结构集合中的元素互相之间没有关系集合的存储:借用其他容器集合的操作:查找和排序这一部分将介绍查找表(静态查找表、动态查找表)散列表排序算法 11.1 散列表的概念11.2 构造散列函数的方法11.3 解决冲突的方法*11.4 散列表的实现*11.5 你怎么看?目录 CONTENTS 2023/9/11散列中的基本问题基于关键码比较的检索 顺序检索,==, !=二分法、树型 , == , 检索是直接面向用户的操作当问题规模n很大时,上述检索的时间效率可能使得用户无法忍受最理想的情况根据关键码值,直接找到记录的存储地址不需要把待查关键码与候选记录集合的某些记录进行逐个比较 散列表的概念哈希法,也称散列法。它不用比较的办法,而是直接根据所求结点的关键字值 KEY 找到这个结点。因此,它的时间复杂性为 O(1),优于任何其它的查找算法。但它不支持有关有序操作。 由数组的直接寻址想到的例如,读取指定下标的数组元素根据数组的起始存储地址、以及数组下标值而直接计算出来的,所花费的时间是O(1)与数组元素个数的规模n无关受此启发,计算机科学家发明了散列方法(Hash, 有人称“哈希”,还有称“杂凑”)散列是一种重要的存储方法也是一种常见的检索方法 散列基本思想一个确定的函数关系h,以结点的关键码K为自变量,函数值h(K)作为结点的存储地址检索时也是根据这个函数计算其存储位置通常散列表的存储空间是一个一维数组散列地址是数组的下标 示 例已知线性表关键码集合为:S = {apple,april,james,jeff,moon,safe,sail,sophia}假设以关键字的首字母在英文字母中的编号作为其散列地址,即: H(keyi) = S[i][0]- ‘a’在计算散列地址时发现:H(apple) = H(april) = 0;H(james) = H(jeff) = 9;H(moon) = 12;H(safe) = H(sail) = H(sophia) = 18。 散列表的概念负载因子 α=n/m散列表的空间大小为m填入表中的结点数为n冲突某个散列函数对于不相等的关键码计算出了相同的散列地址在实际应用中,不产生冲突的散列函数极少存在同义词发生冲突的两个关键码 散列函数设计散列函数的几点要求: (1) 散列函数本身简单高效;(2) 散列函数计算出来的地址应均匀分布在地址空间上,极少出现冲突;(3) 有合适的解决冲突的方法。 11.1 散列表的概念11.2 构造散列函数的方法11.3 解决冲突的方法*11.4 散列表的实现*11.5 你怎么看?目录 CONTENTS 构造散列函数的方法 直接定址法折叠法 数值分析法 平方取中法 除留余数法 直接定址法?关键字是年份,散列函数取关键字的线性函数: H(key)=key+(-2003) 表11.1 新生入学人数表地址01…15年2018人7200 折叠法 折叠法是将较长的关键字从左到右分割成位数相同的几段(最后一段的位数可以少一些),然后把这几段叠加并舍去进位,得到的结果作为散列地址。这种方法适用于关键字位数很多,而且每一位的数字分布大致均匀的情况。 种类:1)移位叠加:将分割后的几部分低位对齐相加2)间界叠加:从一端沿分割界来回折送,然后对齐相加适于关键字位数很多,且每一位上数字分布大致均匀情况 例1,关键字key=23468895327160,散列地址为4位数,对关键字从左到右按4个位数—段分割,共得到4个段:2346、8895、3271、60。折叠法 例2.关键字为 :x=12320324111220,哈希地址位数为3,从左到右按3个位数—段分割,共得到5个段:123、203、241、112、20。采用移位叠加得到: A(x)=123+203+241+112+20=699若采用间界叠加,则从左到右来回折叠中,第二、四段反转为302和211得到: B(x)=123+302+241+211+20=897 折叠法 数值分析法 构造:对关键字进行分析,取关键字的若干位或其组合作哈希地址适于关键字位数比哈希地址位数大,且可能出现的关键字事先知道的情况例:有80个记录,关键字为8位十进制数,哈希地址为2位十进制数假设表长为l00,则可取两位十进制数(00~99)组成散列地址,取哪两位?原则是使得到的散列地址尽量避免产生冲突分析:前4位

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档