第九章哈希表.ppt

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

标识符 内码 内码的平方 散列地址 A 01 01 001 A1 0134 20420 042 A9 0144 23420 342 B 02 4 004 DMAX 21526443617100 443 DMAX1 0415013034 5264473522151420 352 AMAX 135423617100 236 AMAX1 0115013034 3454246522151420 652 示例:设给定的关键码为 key = 23938587841,若存储空间限定 3 位, 则划分结果为每段 3 位. 上述关键码可划分为 4段: 239 385 878 41 把超出地址位数的最高位删去, 仅保留最低的3位,做为可用的散列地址。 由于很难避免冲突,就增加了搜索时间。冲突的出现,与哈希函数的选取 (地址分布是否均匀),处理冲突的方法有关。 在实际应用中,在使用关键字进行散列时,如在用作关键字的许多标识符具有相同的前缀或后缀,或者是相同字符的不同排列的场合,不同的散列函数往往导致散列表具有不同的搜索性能。 下图给出一些实验结果,列出在采用不同的散列函数和不同的处理溢出的方法时,搜索关键码所需的对桶访问的平均次数。实验数据为 { 33575, 24050, 4909, 3072, 2241, 930, 762, 500 }。 当装填因子 ? 较高时,选择的散列函数不同,散列表的搜索性能差别很大。在一般情况下多选用除留余数法,其中的除数在实用上应选择不含有20以下的质因数的质数。 对散列表技术进行的实验评估表明,它具有很好的平均性能,优于一些传统的技术,如平衡树。 但散列表在最坏情况下性能很不好。如果对一 个有 n 个关键码的散列表执行一次搜索或插入操作,最坏情况下需要 O(n) 的时间。 散列表的装填因子 ? 表明了表中的装满程度。越大,说明表越满,再插入新元素时发生冲突的可能性就越大。 哈希表的平均查找长度是 ? 的函数,而不是 n 的函数,即平均搜索长度依赖于散列表的装填因子,不直接依赖于 n 或 m。 不论表的长度有多大,我们总能选择一个合适的装填因子,以把平均搜索长度限制在一定范围内。 作 业 1、设有12个数据{25,40,33,47,12,66,72,87,94,22,5,58},它们存储在哈希表中,利用线性再散列解决冲突,要求插入新数据的平均查找次数不超过3次。求出哈希表的适当大小m,并顺次将各个数据散列到表中。 再散列函数可用 d0=H(key) di=(di-1+2) MOD m 作业 已知一棵3阶B-树如图所示,画出在其中插入关键字18和删除53的过程。 1) 选用的哈希函数; 2) 选用的处理冲突的方法; 3) 哈希表饱和的程度,装载因子 α=n/m 值的大小(n—记录数,m—表的长度) 决定哈希表查找的ASL的因素: 哈希表查找的分析: 从查找过程得知,哈希表查找的平均查找长度实际上并不等于零。 搜索关键码时所需的平均访问次数 从图中可以看出,链地址法优于开地址法;在散列函数中,用除留余数法作散列函数优于其它类型的散列函数,最差的是折叠法。 一般情况下,可以认为选用的哈希函数是“均匀”的,则在讨论ASL时,可以不考虑它的因素。 因此,哈希表的ASL是处理冲突方法和装载因子的函数。 线性探测再散列 链地址法 随机探测再散列 可以证明:查找成功时有下列结果: 从以上结果可见: —— 这是哈希表所特有的特点。 从哈希表中删除记录时,要作特殊处理,相应地,需要修改查找的算法。 五、哈希表的删除操作 六、哈希表也可以用来构造静态查找表 对静态查找表,有时可以找到不发生冲突的哈希函数。即,此时的哈希表的 ASL=0, 称此类哈希函数为理想(perfect)的哈希函数。

文档评论(0)

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

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

1亿VIP精品文档

相关文档