9.4 散列表的查找.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.4 散列表的查找.ppt

* 9.7 散列表的检索 一、散列表的概念 二、散列函数的构造方法 三、冲突处理方法 检索时不要比较,通过计算直接给出元素地址(下标) 包含以下内容: 关键字决定存储地址,即:存储地址=H(元素键值) 一、散列表的概念 思想 散列地址(下标) 散列函数 这样的存储叫散列存储 这样的方法叫散列方法 用散列方法构造的线性表叫散列表 散列也称Hash(哈希)或杂凑 根据存储时用到的散列函数进行的查找叫散列查找 优点 查找速度极快(O(1)),查找效率与元素个数n无关! 有6个元素的关键码分别为:(14,23,39,9,25,11)。 选取散列函数为 H(key)=key % 7 通过散列函数对6个元素建立散列表: 25 39 23 9 14 举例: 6个元素用7个 地址应该足够! H(14)=14%7=0 11 H(25)=25%7=4 H(11)=11%7=4 有冲突! 0 1 2 3 4 5 6 冲突: 通过散列函数的计算,不同的关键码映射到同一个散列地址上,这种现象称为冲突。 其中,23、9互为同义词,39、25、11互为同义词 所以,散列方法必须解决以下两个问题: 1)如何构造好的散列函数 (a)所选函数尽可能简单,以便提高转换速度; (b)所选函数对关键码计算出的地址,应在散列地址集中大致均匀分布,以减少空间浪费。 2)如何制定一个好的解决冲突的方案 查找时,如果从散列函数计算出的地址中查不到关键码,则应当依据解决冲突的规则,有规律地查询其它相关单元。 在散列查找方法中,冲突是不可能避免的,只能尽可能减少! 二、散列函数的构造方法 常用的散列函数构造方法有: 直接定址法 除留余数法 乘余取整法 数字分析法 平方取中法 折叠法 随机数法 要求一:n个数据原仅占用n个地址,虽然散列查找是以空间换时间,但仍希望散列的地址空间尽量小。 要求二:无论用什么方法存储,目的都是尽量均匀地存放元素,以避免冲突。 H(key) = a·key + b (a、b为常数) 优点:以关键码key的某个线性函数值为散列地址,不会产生冲突. 缺点:要占用连续地址空间,空间效率低。 例:关键码集合为{100,300,500,700,800,900}, 选取散列函数为Hash(key)=key/100, 则存储结构(散列表)如下: 0 1 2 3 4 5 6 7 8 9 900 800 700 500 300 100 1、直接定址法 H(key)=key % p (p是一个整数) 特点:以关键码除以p的余数作为散列地址。 关键:如何选取合适的p? 技巧:若设计的散列表长为MAX,则一般取p≤MAX且为质数 3、乘余取整法 2、除留余数法 例:欲以学号最后两位作为地址,则散列函数应为: H(k)=100*(0.01*k % 1 ) 其实也可以用法2实现: H(k)=k % 100 特点:某关键字的某几位组合成散列地址。所选的位应当是:各种符号在该位上出现的频率大致相同。 3 4 7 0 5 2 4 3 4 9 1 4 8 7 3 4 8 2 6 9 6 3 4 8 5 2 7 0 3 4 8 6 3 0 5 3 4 9 8 0 5 8 3 4 7 9 6 7 1 3 4 7 3 9 1 9 例:有一组(例如80个)关键码,其样式如下: 4、数字分析法 讨论: ① 第1、2位均是“3和4”,第3位也只有“ 7、8、9”,因此,这几位不能用,余下四位分布较均匀,可作为散列地址选用。 位号:① ② ③ ④ ⑤ ⑥ ⑦ ② 若散列地址取两位(因元素仅80个),则可取这四位中的任意两位组合成散列地址,也可以取其中两位与其它两位叠加求和后,取低两位作散列地址。 特点:对关键码平方后,按散列表大小,取中间的若干位作为散列地址。 理由:因为中间几位与数据的每一位都相关。 例:2589的平方值为6702921,可以取中间的029为地址。 6、折叠法 特点:将关键码自左到右分成位数相等的几部分(最后一部分位数可以短些),然后将这几部分叠加求和,并按散列表表长,取后几位作为散列地址。 适用于:每一位上各符号出现概率大致相同的情况。 法1:移位法 ── 将各部分的最后一位对齐相加。 法2:间界叠加法──从一端向另一端沿分割界来回折叠后,最后一位对齐相加。 例:元 用法1: 427+518+96=1041 用法2: 427 5

文档评论(0)

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

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

1亿VIP精品文档

相关文档