- 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章
第8章 外部排序 8.1 外部排序的方法 8.1.1 外部排序的方法 8.1.2 多路平衡归并 8.1.3 置换-选择排序 8.2 最佳归并树 当记录以文件的形式存于磁盘上时,其排序过程主要分为两个阶段: 例:设有一个包含4500个记录的输入文件。现用一台其内存至多可容纳750个记录的计算机对该文件进行排序。输入文件放在磁盘上,磁盘每个页块可容纳250个记录, 这样全部记录可存储在 4500 / 250=18 个页块中。输出文件也放在磁盘上, 用以存放归并结果。 若把内存区域等份地分为 3 个缓冲区。其中的两个为输入缓冲区, 一个为输出缓冲区, 可以在内存中利用简单 2 路归并函数 merge( ) 实现 2 路归并。 首先, 从参加归并排序的两个输入归并段 R1 和 R2 中分别读入一块, 放在输入缓冲区1 和输入缓冲区2 中。然后在内存中进行 2 路归并,归并结果顺序存放到输出缓冲区中。 一般地,若总元素个数为n,磁盘上每个页块可容纳b个元素,内存缓冲区可容纳i个页块,则每个初始归并段长度为len = i * b,可生成m = ?n / len? 个等长的初始归并段。在做2路归并排序时,第一趟从m个初始归并段得到 ?m/2? 个归并段,以后各趟将从p (p 1) 个归并段得到 ?p / 2? 个归并段,总归并趟数等于归并树的高度 ?logm?。 若总记录个数为 n,磁盘上每个页块可容纳 b 个记录,内存缓冲区可容纳 i 个页块,则每个初始归并段长度 为 len = i * b,可生成 m = ?n/len? 个初始归并段。 在做 2 路归并排序时, 第一趟从 m 个初始归并段得到 ?m/2? 个归并段,以后各趟将从 l (l 1) 个归并段得到 ?l /2? 个归并段。总归并趟数为 ?log2m? 对 4500 个记录进行排序的例子, 各种操作的计算时间如下: 产生初始归并段: 读 18 个输入块, 内部排序6次, 写18个输出块 =6 tIS+36 tIO 归并趟数 S= ?logkm? 增大归并路数k, 可减少归并趟数S, 从而减少总读写磁盘次数d。 8.1.2 多路平衡归并 (k-way Balanced merging) 从8.1式可以看出增大归并路数k可以减少归并趟数S。图8.2给出对有6个初始归并段的文件做3路平衡归并时的归并树,可以看出只需要归并两趟。 从上例看到好像k越大越好,但是从下面的讨论中又看到单纯增加k将导致增加内部归并的时间。例如对n个元素的文件,做内部k路归并时,在k个元素中选择最小者,需要顺序比较k-1次。每趟归并产生含有u个元素的归并段时,需要做(u-1)*(k-1)次比较,S 趟归并总共需要的比较次数为: S*(u-1)*(k-1) = ?logkm? * (u-1) * (k-1)= ?logm? * (u-1) * (k-1) / ?logk? 在初始归并段个数m与元素个数u一定时, ?logm?*(u-1)是一个常数,而(k-1) / ?logk?在k增大时趋于无穷大。因此,增大归并路数k,会使得内部归并的时间增大。当k增加到一定程度时,可能就抵消了由于减少读写磁盘次数而赢得的时间。 当然我们还可以使用下面将要讲到的“败者树”的方法从k个归并段中选最小者,当k较大时(k ?6),用败者树选出排序码最小的元素只需比较?logk?次(小于k-1次)。此时,S趟归并总共需要的比较次数为: S*(u-1)*?logk? = ?logkm?* (u-1) * ?logk? = ?logm? * (u-1) * ?logk? / ?logk? = ?logm? * (u-1) 从得到的式子可以看出总的排序码比较次数与k无关,也就是说总的归并时间不会随k的增大而增大。因此,只要内存空间允许,增大归并路数k,将有效地减少归并树深度,从而减少读写磁盘次数d,提高外部排序的速度。 失败者树:所谓败者树是一棵正则的完全二叉树,其中每个叶结点存放当前参加比较的元素;每个非叶结点存放其子女结点中排序码大的结点(即败者),让二者中的小排序码去参加更上一层的比较,当到达根结点时,根中仍存放其左、右子中较大排序码,得到的小排序码就是目前序列的最小排序码。 设有5个初始归并段,m0=[6,16,∞]、m1=[8,12,∞]、m2=[30,38,∞]、m3=[9,22,∞]、m4=[20,40,,90,∞],其中∞为段结束标志MaxNum,开始进行5路归并,每个归并段有一个排序码参加归并,每个非叶结点中的段号为其左、右子女中的排序码大的元素所在的段号(败者),数组Ls存放比较过程的结果,如图8.3中,Ls[2]=0(即段m
您可能关注的文档
最近下载
- 主干道交通护栏清洗.doc VIP
- 《钢筋机械连接技术规程》JGJ107-2010.pdf VIP
- 2025广东机械原理自考试题及答案.doc VIP
- 食堂用品定点供应(米面油)投标方案(技术方案).docx
- 长沙市xx中医医院“十五五”发展规划.docx
- AOI光学测试仪培训.pptx VIP
- 山东省济宁市任城区2023-2024学年七年级上册期末检测英语模拟试题(附答案).docx VIP
- 最新版初中物理课程标准科学内容解读.docx VIP
- 2025年高校教师资格证考试《高等教育心理学》真题卷(附详细解析).pdf VIP
- 2023-2024学年山东省济宁市兖州区八年级(上)期中英语试卷..pdf VIP
原创力文档


文档评论(0)