数据结构外部分类.ppt

上传人:小飞机 文档编号:6296848 上传时间:2023-10-14 格式:PPT 页数:20 大小:528KB
返回 下载 相关 举报
数据结构外部分类.ppt_第1页
第1页 / 共20页
数据结构外部分类.ppt_第2页
第2页 / 共20页
数据结构外部分类.ppt_第3页
第3页 / 共20页
数据结构外部分类.ppt_第4页
第4页 / 共20页
数据结构外部分类.ppt_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《数据结构外部分类.ppt》由会员分享,可在线阅读,更多相关《数据结构外部分类.ppt(20页珍藏版)》请在三一办公上搜索。

1、7.1 磁盘文件的归并分类7.2 磁带文件的归并分类,第7章 外部分类(Sorting),归并方法:首先将文件中的数据输入到内存,采用内部分类方法进行分类(归并段),然后将有序段写回外存;对多归并段进行多遍归并,最后形成一个有序序列。,例:假设一个磁盘文件,由4500个记录组成,分别记为A1,A2,A4500 设系统提供容纳750个记录的内存共分类使用,每次磁盘读写250个 记录的数据块,则可设计分类过程如下:,7.1 磁盘文件的归并分类,(1)每次从文件中输入三个数据块(750个记录)到工作空间,进行内部分类。分类结果写回磁盘,构成6个初始归并段:R1,R2,R3,R4,R5,R6,(2)将

2、内存空间三等分,每块250个记录,其中2块为输入缓冲区,1块为输出 缓冲区。归并R1和R2,输出到输出缓冲区,若输出缓冲区满,则写盘。同样,若 R1和R2的缓冲区出现空,则继续读盘,直到归并结束为止。R12=R1+R2;同样得到:R34=R3+R4,R56=R5+R6;R12、R34、R56分别都包含1500个记录。,(3)类似(2)的方法,可将R12和R34归并成R1234,,再将R1234和R56进行归并。得到最后的排序结果。,logkm遍比较次数:,(1)多路归并减少归并遍数,m个初始段进行 2 路归并,需要 log2m 遍归并;一般地,m 个初始段,采用k路归并,需要 logkm 遍归

3、并。,显然,k 越大,归并遍数越少,可提高归并的效率。,在 k 路归并时,从 k 个关键字中选择最小记录时,要比较 K-1 次。若记录总数为 n,每遍要比较的次数为:n*(k-1)log2m/log2k 可以看出,随着k增大,(k-1)/log2k 也增大,当归并路数多时,CPU 处理的时间也随之增多。为此要选择好的分类方法,以减少分类中比较次数。,选择树(Selection tree)或 败者树(tree of loser),分析:,第一次建立选择树的比较所花时间为:O(k-1)=O(k)而后每次重新建造选择树所需时间为:O(log2k)n 个记录处理时间为初始建立选择树的时间加上 n-1

4、次重新选择树的时间:O(n-1)log2k)+O(k)=O(n log2k)这就是k路归并一遍所需的CPU处理时间。归并遍数为 logkm,总时间为:O(n log2k logkm)=O(n log2m)(k 路归并 CPU 时间与 k 无关),最佳归并树,将哈夫曼树进行拓展,不仅对二叉树,同样可形成三叉、四叉、k叉树,亦称为哈夫曼树,同样可求得带权路径长度最小。,最佳归并树:对长度不等的m个初始归并段,构造哈夫曼树作为归并树,便可使在进行外部归并时所需要对外存进行的读写次数达到最小。,最佳归并树中,并不只是只有度为k和0的结点,会有缺额。当初始归并段的数目不足时,需附加长度为0的虚段,按照哈

5、夫曼树的构造原则,权为0的叶子结点应离树根最远。,若(m-1)%(k-1)=0 则不需要附加虚段;否则需要附加:k-(m-1)%(k-1)-1 个虚段。,第一次归并的路数为:(m-1)%(k-1)+1,并行操作的缓冲区处理使输入、输出和 CPU 处理尽可能重叠,对k个归并段进行 k 路归并至少需要k个输入和1个输出缓冲区,要使输入、输出和归并同时进行,k+1个缓冲区是不够的,需要2k个输入缓冲区实现并行操作。,135789,246152025,(3)初始归并段的生成,(a)初始归并段的长度缓冲区的长度,(b)任何内部分类算法都可作为生成初始归并段的算法,(c)例如:缓冲区的长度为4,输入序列为

6、:15 19 04 83 12 27 11 25 16 34 26 07 10 90 06,新输入记录.key小于当前记录.key,等待下一个归并段,采用选择树法生成初始归并段的长度平均是缓冲区长度的两倍。,7.2 磁带文件的归并分类,(外部)存储设备纸带、磁鼓、磁带、磁盘等,与磁盘不同,磁带是顺序存储设备,读取信息块的时间与信息块的位置有关。研究磁带分类,需要了解信息块的分布。,K路平衡归并分类,磁带机数量:2k,注:在多路归并中,若要求归并的文件其初始归并段总数不是K阶Fibonacci数,则需附加一些虚的归并段数,以凑成k阶Fibonacci数,同时还应该将虚归并段适当地分布在k路归并的

7、k台磁带上。,例1:设有磁盘文件中记录的关键字分别为:10,20,15,25,12,13,21,30,8,16,10 用置换-选择排序法产生初始归并段,问可产生几个初始 归并段?每个初始归并段包含哪些记录(设工作区能容 纳4个记录)。,解:内存缓冲区可容纳4个记录,采用4路归并的置换-选择 排序方法生成初始归并段,如表所示。,例2:给出一组关键字T=(12,2,16,30,8,28,4,10,20,6,18),设内存 工作区可容纳4个记录,写出用置换-选择排序得到的全 部初始归并段。,解:初始归并段1:2,8,12,16,28,30 初始归并段2:4,6,10,18,20,例3:设有13个初始

8、归并段,其长度分别为:28,16,37,42,5,9,13,14,20,17,30,12,18。试画出4路归并时的最佳排序树,并计 算它的带权路径长度。,解:n=13,k=4 因为(n-1)%(k-1)=0,所以不需要加虚段。,WPS=(5+9+12+13+14+16+17+18+20+28+30+37)2+42=480,例:假设4个初始归并段如下:R1:15,16,25,32 R2:3,22,28,45 R3:1,12,30,42 R4:33,60 给出进行4路归并的过程。,(1)输出 1R1:15,16,25,32R2:3,22,28,45R3:12,30,42R4:33,60,(2)输出

9、 1,3R1:15,16,25,32R2:22,28,45R3:12,30,42R4:33,60,(3)输出 1,3,12R1:15,16,25,32R2:22,28,45R3:30,42R4:33,60,(4)输出 1,3,12,15R1:16,25,32R2:22,28,45R3:30,42R4:33,60,(5)输出 1,3,12,15,16R1:25,32R2:22,28,45R3:30,42R4:33,60,(6)输出 1,3,12,15,16,22R1:25,32R2:28,45R3:30,42R4:33,60,(7)输出 1,3,12,15,16,22,25R1:32R2:28,

10、45R3:30,42R4:33,60,(8)输出 1,3,12,15,16,22,25,28R1:32R2:45R3:30,42R4:33,60,(9)输出 1,3,12,15,16,22,25,28,30R1:32R2:45R3:42R4:33,60,(10)输出 1,3,12,15,16,22,25,28,30,32R1:R2:45R3:42R4:33,60,(11)输出 1,3,12,15,16,22,25,28,30,32,33R1:R2:45R3:42R4:60,(12)输出 1,3,12,15,16,22,25,28,30,32,33,42R1:R2:45R3:R4:60,(13)

11、输出 1,3,12,15,16,22,25,28,30,32,33,42,45R1:R2:R3:R4:60,(14)输出 1,3,12,15,16,22,25,28,30,32,33,42,45,60R1:R2:R3:R4:,归并结束,例:假设某文件经内部排序得到100个初始归并段,试问:(1)若使用多路归并 3 趟完成排序,则应取归并的路数至少 为多少?(2)假设操作系统要求一个程序同时可用的输入、输出文件 的总数不超过 3 个,则按多少路归并至少需要几趟可以 完成排序?如果限定这个趟数,则可取的最低路数是多 少?,解:(1)m=100,s=3 s=logkm=2 得 k 至少为 5。,(2)因为输入输出的文件总数不超过13个,所以每次可取 12 个 文件作为输入,1个文件作为输出,这就是说每次可取12路 进行归并,则至少需2趟归并排序。如果限定归并趟数为 2,对于总数为100的初始归并段,则进行10路归并即可。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号