第9章 散列结构及其应用.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文档。上传文档
查看更多
* * 第9章 散列结构及其应用 散列结构的基本概念 线性探测散列算法 链地址散列算法 散列结构的查找性能分析 散列结构的基本概念 散列结构:以所需存储的结点的关键字作为自变量,通过特定函数H(散列函数或哈希函数)进行计算,以函数值作为该结点的存储地址。 特点:按关键字查找不再需要比较,直接计算出结点存储地址。周到 341 5 3赵六 302 4 5王五 378 3 1李四 356 2 2张三 315 1 4 学号 姓名 总分 编号 名次 示例:如左表,一条记录为一个结点,可以用一个一维数组students[5]存储。 1、若以编号为关键字,令H(key)=key-1。这时结点与存储地址是一一对应关系。 2、若以学号为关键字,令H(key)=key % 5。这时记录2与记录5地址相同。 3、若以姓名为关键字,令H(key)=key的第一个拼音字母在字母表中的序号。这时记录1、4和5同地址,且数组下标需扩充。 冲突与同义词:如果不同关键字的散列函数值相同,这种现象称为冲突。冲突的两个关键字称为同义词。 散列表(哈希表):根据散列函数和相应的冲突处理方法将一组关键字映射到一个有限的连续存储空间上,这种存储结构称为散列表。这一映射过程称为哈希造表或散列。 散列结构的基本概念--常用散列 直接定址法:H(key)=a*key+b。 特点:关键字与地址一一对应,不会发生冲突。但当关键字值域较大时,空间需求大。如:某种程序设计语言的标识符由英文字母组成,长度不超过5。编译程序需要保存程序中所使用到所有标识符。这里,关键字是标识符,值域很大,但没有必要开辟同样大的存储空间。 除留余数法:H(key)=key % p。如上例方法2。显然,这时散列表的长度为p。 特点:可能发生冲突,需要冲突处理方法。一般选择p为质数或不包含20内的质因数的合数。 数字分析法:分析关键字集合中每一个关键字中的每一位数码的分布情况,找出数码分布均匀的若干位作为关键字结点的存储地址。如上例中,可以取学号的右起第3位和第1位构造地址。这时各记录的存储地址依次为38、41、22、04、76 特点:可能发生冲突,需要冲突处理方法。且需分析得到各数码的分布规律。 平方取中法:将关键字平方后取中间几位数字作为结点的存储地址。 特点:可能发生冲突,需要冲突处理方法。 折叠法:将关键字分隔成位数相等的几部分(最后一部分除外),取这几部分的叠加作为结点的存储地址。叠加方式有移位叠加(各部分低位对齐后相加)和间界叠加(各部分从分割界折叠后对齐相加)两种。 特点:可能发生冲突,需要冲突处理方法。适应:关键字位数较多,每位数字分布较均匀。 散列结构的基本概念--冲突处理 开放地址法:H(key)=a*key+b。散列表中所有空的地址向冲突处理开放。在散列表未满时,处理冲突的下一个空地址在散列表内部解决。求下一个空地址的公式为: Hi=(H(key)+di) % m,i=1,2,…,km。di为增量序列,其构造方法主要有: 线性探测再散列:di=i。[示例] 二次探测再散列:di=(-1)i+1*i2。[示例] 伪随机探测再散列:di为伪随机序列。[示例] 链地址法:在散列表的每个存储单元中增加一个指针域,把产生冲突的关键字或结点以链表结构存放在指针指向的单元中。 特点:散列表中空的地址不向冲突的同义词开放,采用动态链式存储结构存储。可以从根本上杜绝二次聚集的发生,但会浪费部分散列表的空间。 线性探测再散列--示例 设关键字为39、23、58、73,散列表长度为17。由除留取余法得: H(39)=5 H(23)=6 H(58)=7 H(73)=5(冲突) 线性探测:H1=(5+1)%17=6(冲突,继续探测) H2=(5+2)%17=7(冲突,继续探测) H3=(5+3)%17=8(无冲突,新地址找到) 特点:思路清楚、算法简单。不足:产生的新地址可能对后续处理产生冲突(这种现象称为二次聚集)。 二次探测再散列--示例 设关键字为39、23、58、73,散列表长度为17。由除留取余法得: H(39)=5 H(23)=6 H(58)=7 H(73)=5(冲突) 线性探测:H1=(5+1)%17=6(冲突,继续探测) H2=(5+2)%17=7(冲突,继续探测) H3=(5+3)%17=8(无冲突,新地址找到) 二次探测:H1=(5+1)%17=6(冲突,继续探测) H2=(5-

文档评论(0)

38号店铺 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档