第二十五讲哈希表查找.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.3.1 哈希表的概念 在前面讲过的几种查找方法中,都是在结 构中查找记录时需要进行一系列和关键字的比 较。查找的效率依赖于查找过程中所进行的比 较次数。; 理想的情况是希望不经过任何比较,一次 存取便能够得到所查记录,那就必须在记录的 存储位置上和它的关键字之间建立一个确定的 对应关系f,使每个关键字和结构中一个唯一 的存储位置相对应。因而在查找时,只要根据;这个对应关系f找到给定值k的的映像f(k)。若 结构中存在关键字和k相等的记录,则必定在 f(k)的存储位置上,由此,不需要进行比较便 可直接取得所查记录。在此,我们称这个对应 关系f为哈希函数,按这个思想建立的表为哈 希表。 ;而使用哈希表进行查找的方法称为哈希查找。 因此,其查找时间与计算地址的函数有关。 假设table是一个包含n个元素的线性表,Ri 为表中的某个元素(1=i=n),keyi是其关键 字值,若在关键字值keyi与元素Ri的地址(即 在线性表中的位置)之间建立某种函数关系,;则可以通过这个函数,把关键字值转换成相应 元素在表中的地址,即 Addr(Ri)=H(keyi) 其中,Addr(Ri)为Ri的地址,函数 H 称为哈希 (Hash)函数(散列函数), 称H(keyi) 的值为哈希地址(散列地址)。 ;哈希查找的基本思想: 确定将关键字值转换成存储位置的函数 H,以记录中关键字值K为自变量,对应的函 数值H(K)作为其记录的存储地址将其存到 相应的位置中。查找时,通过函数H计算得到 待查找记录的存储位置。; 在进行查找之前,我们先来了解如何构造哈希表。例如:假定一个线性表为 S={18,75,60,43,54,90,46,67} 将其存储到数组H[13]中,如下图所示:; 若哈希函数定义为H(key)=key%13,则查找 过程就是一个求H(key)的值的过程,如查找 75,则H(75)=75%13=10,说明H[10]存放着 75。若查找90, H(90)=90%13=12,说明 H[12]存放着90。; 若根据哈希函数,把元素存放到线性表中相 应的位置上,这样形成的表便称为哈希表,又 叫散列表。哈希表的查找是以同样的方式进行 的。 若某个哈希函数对于不同的关键字值key1和 key2,得到相同的散列地址,;即H(key1)= H(key2),这种现象称为冲 突。例如:H(54)=H(67)=2,说明54和 67在存放时发生冲突,即54和67都要存放到 H[2]中,这就需要有办法来处理冲突,发生 冲突的关键字对该哈希函数H(key)来说称 为是同义词。 ;; 综上所述,哈希表是根据设定的哈希函 数和解决冲突的方法,为一组元素建立一张 表,每个元素在表中的位置依赖于设定的哈 希函数和解决冲突的方法。 ; 8.3.2 哈希函数的构造方法 构造哈希函数的方法很多,在讲述各种 方法之前,首先需要明确什么是“好”的哈希 函数。 若对于关键字集合中的任一个关键字, 经哈希函数映像到地址集合中任何一个地址 的概率是相等的,则称此类哈希函数为均匀;的(Uniform)哈希函数。换句话说,就是使 关键字经过哈希函数得到一个“随机的地址”, 以便使一组关键字的哈希地址均匀分布在整个 地址空间中,从而减少冲突。 ;1、直接地址法(这种哈希函数叫做自身函数) 哈希函数H对于关键字是数字类型的元素, 直接利用关键字求得哈希地址。 H(key)=key 或 H(key)=a×key+b 在使用时,为了使哈希地址与存储空间吻合,可以调整a和b的值,a,b为常数。;地 址;分析:该方法计算简单,一个关键字对应一个 存储地址,不会产生冲突,这种方法适用于关 键字分布连续的情况,但在实际应用中有一定 的局限性。;若干位作为哈希地址,它要求可能出现的关键 字事先知道的情况。 例如:以下一组关键字由7位十进制构成。 ; ① ② ③ ④ ⑤ ⑥ ⑦; 我们对关键字的每一位数字分析发现,第①② 位都是数字7和2;第③位的数字只取0和1;第⑤位的数字取0,1,2和3;第⑦位的数字取1和2,因此第①②③⑤⑦几位都不取,而第④⑥位的数字分布均匀。我们取④⑥ 两位数字为哈希地址。所有元素的哈希地址得出的结果如下: H(k1)=56 H(k2)=14 H(k3)=23 ;H(k4)=20 H(k5)=35 H(k6)=41 ;3

文档评论(0)

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

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

1亿VIP精品文档

相关文档