- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
本章小结 掌握六种查找算法:顺序查找、二分查找、分块查找、二叉排序树、二叉平衡树及哈希表查找。 重点掌握二分查找算法和二叉排序树查找算法。 学会用哈希表来解决冲突问题。 8.1 顺序查找 8.2 二分查找 8.3 分块查找 8.4 二叉排序树 8.5 二叉平均树 8.6 哈希表查找 哈希表查找法也称为散列表查找法,不同于前面介绍的几种查找方法。本节讨论哈希表查找的基本概念、构造哈希函数的方法和冲突解决方法。 8.6 哈希表查找 8.6.1 哈希表查找的基本概念 在前面讨论的各种查找方法中,查找的过程都需要依据关键字进行若干次的比较判断,最后确定在数据表中是否存在关键字等于某个给定值的元素以及该元素在数据表中的位置,在查找过程中只考虑各元素的关键字之间的相对大小,记录在存储结构中的位置和其关键字无直接关系。如果元素的存储位置和其关键字之间建立某种直接关系,那么在进行查找时,就无须作比较或作很少次的比较而按照这种关系直接由关键字找到相应的记录。 设置一个长度为m的表A,用一个函数H把数据集中的n个结点的关键字惟一地转换成0~m-1范围内的数值,即对于数据集中的任意结点的关键字ki,有: 0≤H(ki)≤m-1 (0≤i≤n-1) 这样就可以利用函数H将数据集中的元素映射到表A中,H(ki)便是ki在表中的存储位置。H是表与元素关键字之间映射关系的函数,称为哈希函数。 这就是哈希表查找的思想,它通过对元素的关键字值进某种运算,直接求出元素的地址,即使用关键字到地址的直接转换方法,而不需要反复比较,因此,哈希表查找法又叫杂凑法或散列法。 当然,也可以用给定的关键字和所采用的哈希函数直接在给定的表中进行查找运算,然而由于数据集中各元素关键字的取值可能在一个很大的范围,所以即使当数据集中的元素个数不是很多时,也很难选取一个合适的哈希函数H(),它能保证对于任意不同的 ki和 kj,有H(ki)≠H(kj)。ki≠kj而H(ki)=H(kj)的现象称为冲突现象。 尽管冲突现象是难免的,人们还是希望能找到尽可能产生均匀映射的哈希函数,从而尽可能地降低发生冲突的概率,另外,当发生冲突时,还必须有相应的解决冲突的方法。因此构造哈希函数和建立解决冲突的方法是哈希表查找的两个主要任务。 8.6.1 哈希表查找的基本概念 构造哈希函数的方法很多,但如何构造一个“好”的哈希函数是带有很强的技术性和实践性的问题。这里的“好”指的是哈希函数的构造比较简单并且用此哈希函数产生的映射,发生冲突的可能性较小,换句话说,一个好的哈希函数能将给定的数据集均匀地映射到所给定的地址区间中。 由于关键字可以惟一地对应一个记录,因此,在构造哈希函数时,应尽可能地使关键字的各个成份都对它的哈希地址产生影响。下面介绍几种常用的构造哈希函数的方法。 (1)直接地址方法 直接地址法的哈希函数H对于关键字是数值类型的数据,可直接利用关键字求得哈希地址。 8.6.2构造哈希函数的方法 H(ki)=aki+b (a、b为常量) 在使用时,为了使哈希地址与存储空间吻合,可以调整a和b。例如,取H(ki)=3*ki+5。 直接地址法的特点是哈希函数简单,并且对于不同的关键字,不会产生冲突。但在实际问题中,由于关键字集合中的元素很少是连续的,用该方法产生的哈希表会造成空间的大量浪费。因此。这种方法很少使用。 (2)数字分析法 数字分析法是假设有一组关键字,每个关键字由n位数字组成,如k1k2…..kn。从中提取数字分布比较均匀的若干位作为哈希地址。 8.6.2构造哈希函数的方法 例如,对于关键字k1到k8的序列{100011211,100011322,100011413,100011556,100011613,100011756,100011822,100011911},可以取第6位和第7位作为哈希地址,即:H(k1)=12,H(k2)=13,H(k3)=14,H(k4)=15,H(k5)=16,H(k6)=17,H(k7)=18,H(k8)=19。 (3)除留余数法 除留余数法是用关键字ki除以一个合适的、不大于哈希表长m的正整数p所得余数作为哈希地址的方法。对应的哈希函数H(ki)为: H(ki)= ki MOD p 其中,MOD表示求余数运算符。用该方法产生的哈希函数的好坏取决于p值的选取。实践证明,当p取小于哈希表长m的最大素数时,产生的哈希函数较好。 除留余数
文档评论(0)