- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[工学]计算机软件技术基础-第2章-常用数据结构及其运算3查找和排序
哈希函数 我们将记录的关键字值与记录的存储位置对应起来的关系H称为哈希函数,H(k)的结果称为哈希地址。 哈希表 是根据哈希函数建立的查找表。 哈希表即是一种存储形式,又是一种查找方法,通常将这种查找方法称为哈希查找。 使用哈希表方法进行查找不必进行多次关键字的比较,查找速度比较快。 但问题是会产生冲突。 示例:有一组表项,其关键字分别是 12361, 07251, 03309, 30976 对不同的关键字, 通过哈希函数的计算, 得到了同一哈希地址。这种现象称为冲突。 由于关键字集合比地址集合大得多, 冲突很难避免。所以对于哈希方法, 需要讨论以下两个问题: 2.哈希函数的构造 (1)直接定址法 取关键字的某个线性变换作为哈希函数: H(key)=a* key+b ( a, b为常数) 这类哈希函数是一对一的映射,一般不会产生冲突。 但是,它要求哈希地址空间的大小与关键字集合的大小相同。 例: 有一组关键字如下: { 942148, 941269, 940527, 941630, 941805, 941558, 942047, 940001 } 哈希函数为 H (key) = key - 940000 H(942148) = 2148 H (941269) = 1269 H (940527) = 527 H (941630) = 1630 H (941805) = 1805 H (941558) = 1558 H (942047) = 2047 H (940001) = 1 可以按计算出的地址存放记录。 (2)除留余数法 设哈希表中允许地址数为 m, 取一个不大于 m的最最大素数 p 作为除数, 利用以下函数把关键字转换成哈希地址: H ( key ) = key % p p ? m (1) 开放定地址法 3.哈希冲突解决方法 开放定地址法-线性探测再散列 (2) 链地址法 示例:给出一组记录,关键字为: { Burke, Ekers, Broad, Blum, Attlee, Alton, Hecht, Ederly }。 哈希函数为: Hash (x)=ord (x)-ord (A)。 用它计算可得: Hash (Burke) = 1 Hash (Ekers) = 4 Hash (Broad) = 1 Hash (Blum) = 1 Hash (Attlee) = 0 Hash (Hecht) = 7 Hash (Alton) = 0 Hash (Ederly) = 4 哈希表为 HT[0:25],m = 26。 4.结论 哈希表是一种直接计算记录存放地址的方法,它在关键字与存储位置之间直接建立了映象。哈希表即是一种存储形式,又是一种查找方法。 当选择的哈希函数能够得到均匀的地址分布时, 在查找过程中可以不做多次探测。 由于很难避免冲突, 增加了查找的时间,查找效率与哈希函数的选取和处理冲突的方法 有直接关系。不同的哈希函数和不同的处理冲突的方法往往导致哈希表具有不同的查找性能。 二、选择排序 1)简单选择排序 例:关键字序列T= (21,25,49,25*,16,08),请给出简单选择排序的具体实现过程。 简单选择排序的算法如下:(亦可参见教材P92) 2) 堆排序 例: 怎样建堆? 建堆算法 (等同于堆排序算法中的第一步) 针对结点 i 的堆调整函数HeapAdjust 表述如下: 怎样进行堆排序? 例:对刚才建好的大根堆进行排序: 堆排序的算法 堆排序算法分析: 原始序列: 256,301,751,129,937,863,742,694,076,438 1) 冒泡排序 冒泡排序的算法分析 2) 快速排序 例1:关键字序列 T=(21,25,49,25*,16,08),请写出快速排序的算法步骤。 例2:关键字序列 T=(21,25,49,25*,16,08),计算机如何实现快速排序算法的某一趟过程? 例3:以关键字序列(256,301,751,129,937,863,742,694,076,438)为例,写出执行快速算法的各趟排序结束时,关键字序列的状态。 整个快速排序的递归算法: “快速排序”是否真的比任何排序算法都快? 本章内容总结 排序: 设有含n个记录的序列为{R1,R2, ┅ ,R
文档评论(0)