- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5 最佳归并树 由置换-选择生成所得的初始归并段,其各段长度不等。 假如由置换-选择得到9个初始归并段,其长度分别为:9, 30, 12, 18, 3, 17, 2, 6, 24。作3-路平衡归并(如下图),假设每个记录占一个物理块,则两趟归并所需对外存进行的读/写次数为:(9+30+12+18+3+17+2+6+24)x2x2=484 11-* 9 30 12 51 18 3 17 38 2 6 24 32 121 5 最佳归并树 考虑下图的归并过程,仅需对外存进行446次读/写,这棵归并树为最佳归并树(11+32+59+121)x2,为所有归并策略中所需读/写次数最小的方案。 11-* 2 3 6 11 30 9 17 18 24 59 121 12 32 5 最佳归并树 存在有m个叶节点的带权路径长度最短的k叉树,称为霍夫曼树(Huffman)。 对长度不等的m个初始段,以其长度为权,构造一棵霍夫曼树作为归并树,便可使得在进行外部归并时所需对外存进行的读/写次数达到最小。 11-* 2 3 5 24 9 17 18 12 47 91 6 20 5 最佳归并树 对k-路归并而言,若(m-1) MOD (k-1) = 0,则导出的霍夫曼树节点的度数刚好为0或k,否则,可附加k - (m-1) MOD (k-1) – 1个虚段,即第一次归并为 (m-1) MOD (k-1) + 1路归并。 若按最佳归并树的归并方案进行磁盘归并排序,需在内存建立一张载有归并段的长度和它在磁盘上的物理位置的索引表。 11-* THE END 数据结构外部排序 本章内容 1 外存信息的存取 2 外部排序的方法 3 多路平衡归并的实现 4 置换-选择排序 5 最佳归并树 1 外存信息的存取 常用的外存储器分类: 顺序存取的设备(如磁带); 随机存取的设备(如磁盘)。 常用的外存储器是磁表面存储器, 信息记录在一薄层磁性材料的表面上, 这层材料附着于载体表面, 随着载体作高速旋转或直线运动, 在运动过程中用磁头进行读或写。 外存信息的存取特点, 决定了外部排序的策略选择。 11-* 1 外存信息的存取 磁带信息的存取 磁带存储器的工作原理和磁带录音机一样, 不同之处在于它存储的是数字信息而不是模拟信息。 磁带上的信息在横向分布、纵向分布以及首尾标志等都一定的格式。 以1/2英寸九道的磁带为例, 每一横排就可表示一个字符(8位+1个校验位)。 纵向按区进行存储, 区的长度不固定, 但有一个范围, 例如2到4096字节, 相邻区之间有一定长度的间隔(IBG, Inter Block Gap), 作为磁带起停之用。 11-* 记录 1 记录 3 记录 2 1 外存信息的存取 在磁带上读写一块信息所需的时间由两部分组成: TI/O = ta + n tw ta为延迟时间, 即读/写头到达传输信息所在物理快起始位置所需时间; tw为传输一个字符的时间。 显然, 延迟时间和信息在磁带上的位置、当前读/写头所在的位置有关。 所以磁带便宜、可反复使用、是一种顺序存取设备, 但查找费时、速度慢(尤其是查找末端记录时)。 11-* 1 外存信息的存取 磁盘信息的存取 磁盘是一种直接存取的存储设备(DASD)。 页块的读写时间:TI/O = tseek + tlatency + n twm tseek:寻道时间 tlatency:等待时间 twm:传输时间 11-* 2 外部排序的方法 外部排序基本上由两个相对独立的阶段组成: 首先, 按可用内存大小, 将外存上含n个记录的文件分成若干长度为l的子文件或段(segment), 依次读入内存并利用有效的内部排序方法对它们进行排序, 并将排序后得到的有序子文件重新写入外存, 通常称这些有序子文件为归并段或顺串(run); 然后, 对这些归并段进行逐躺归并, 使归并段(有序的子文件)逐渐由小至大, 直到得到整个有序文件为止。 11-* 2 外部排序的方法 例:一文件含10000记录, 通过10次内部排序得到10个初始归并段R1…R10, 其中每一段都含有1000个记录。 然后作两两归并: R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R1’ R2’ R3’ R4’ R5’ R1’’ R2’’ R3’’ R1’’’ R2’’’ 有序文件 由10个初始归并段到一个有序文件, 共进行了4趟归并, 每一趟都从
原创力文档


文档评论(0)