数据结构与算法基础(第三版)第七章外部分类精品PPT课件

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

国家示范性软件学院 2005 ·秋
Slide. 7 - 4
D.S. 数据结构与算法
第七章 外部分 类
(1) 多路归并——减少归并遍数
m个初始段进行 2 路归并,需要 log2m 遍归并; 一般地,m 个初始段,采用k路归并,需要 logkm 遍归并。
显然,k 越大,归并遍数越少,可提高归并的效率。
Slide. 7 - 1
D.S. 数据结构与算法
第七章 外部分 类
7.1 磁盘文件的归并分类
例:假设一个磁盘文件,由4500个记录组成,分别记为A1,A2,……,A4500 设系统提供容纳750个记录的内存共分类使用,每次磁盘读写250个
记录的数据块,则可设计分类过程如下:
(1)每次从文件中输入三个数据块(750个记录)到工作空间,进行内部分类。
分类结果写回磁盘,构成6个初始归并段:R1,R2,R3,R4,R5,R6
R1
R2
R3
R4
R5
R6
1-750
751-1500 1501-2250 2251-3000 3001-3750 3751-4500
(2)将内存空间三等分,每块250个记录,其中2块为输入缓冲区,1块为输出
缓冲区。
归并R1和R2,输出到输出缓冲区,若输出缓冲区满,则写盘。同样,若 R1和R2的缓冲区出现空,则继续读盘,直到归并结束为止。R12=R1+R2; 同样得到:R34=R3+R4, R56=R5+R6; R12、R34、R56分别都包含1500个记录。
iu(1) iu(2)
(d) 5 6
(e)
7 8
(f)
9 -
输出ou(2)
8-
归并到ou(1) 9 -
输出ou(1)
- 20 输出oLeabharlann Baidu(2)
- 20
归并到ou(2) 9 25 归并到ou(1) - 25
输入到in(1) - -
输入到in(2)
-
-
输入到in(3)
-
7 15
- 15
15
国家示范性软件学院 2005 ·秋
国家示范性软件学院 2005 ·秋
Slide. 7 - 2
D.S. 数据结构与算法
第七章 外部分 类
(3)类似(2)的方法,可将R12和R34归并成R1234,,再将R1234和R56进行归并。 得到最后的排序结果。
R1
R2
R3
R4
R5
R6
6×750记录
R12
R34
R56
3×1500记录
R1234
国家示范性软件学院 2005 ·秋
Slide. 7 - 5
D.S. 数据结构与算法
第七章 外部分 类
选择树 ( Selection tree ) 或
6
败者树 ( tree of loser )
6
8
9
6
8
17
10 9 20 6 8 9 90 17
15 20 20 15 15 11 100 18 16 38 30 25 50 16 110 20
第一次归并的路数为:(m-1) % (k-1) + 1
国家示范性软件学院 2005 ·秋
Slide. 7 - 7
D.S. 数据结构与算法
第七章 外部分 类
(2) 并行操作的缓冲区处理——使输入、输出和 CPU 处理尽可能重叠
对k个归并段进行 k 路归并至少需要k个输入和1个输出缓冲区,要使输入、输出 和归并同时进行,k+1个缓冲区是不够的,需要2k个输入缓冲区实现并行操作。
Slide. 7 - 8
D.S. 数据结构与算法
第七章 外部分 类
(3) 初始归并段的生成
(a) - --
1(b) 2 -
(c)
3 4
1
2
ou(1) ou(2)
34
12
5
6
34 iu(1) iu(2) 归并到ou(1)
7 15
8 20
--
输入到in(3)
9 25
--
-34
57-
输出ou(1) 归并到ou(2)
输入到in(4)
---
56 7 15
iu(3) iu(4)
iu(1) iu(2)
O(n ·log2k ·logkm)=O(n ·log2m) ( k 路归并 CPU 时间与 k 无关 )
国家示范性软件学院 2005 ·秋
Slide. 7 - 6
D.S. 数据结构与算法 最佳归并树
第七章 外部分 类
将哈夫曼树进行拓展,不仅对二叉树,同样可形成三叉、四叉、……、k 叉树,亦称为哈夫曼树,同样可求得带权路径长度最小。
最佳归并树: 对长度不等的m个初始归并段,构造哈夫曼树作为归并树,便可使在进 行外部归并时所需要对外存进行的读写次数达到最小。
最佳归并树中,并不只是只有度为k和0的结点,会有缺额。当初始归并 段的数目不足时,需附加长度为0的虚段,按照哈夫曼树的构造原则,权 为0的叶子结点应离树根最远。
若 (m-1) % (k-1) ==0 则不需要附加虚段;否则需要附加: k-(m-1)%(k-1)-1 个虚段。
分析:
第一次建立选择树的比较所花时间为:
O( k-1 ) = O ( k) 而后每次重新建造选择树所需时间为:
O( log2k ) n 个记录处理时间为初始建立选择树的时 间加上 n-1 次重新选择树的时间:
O((n-1) ·log2k)+O(k) = O ( n ·log2k ) 这就是k路归并一遍所需的CPU处理时间。 归并遍数为 logkm,总时间为:
12×250记录
R1234
国家示范性软件学院 2005 ·秋
18×250记录
Slide. 7 - 3
D.S. 数据结构与算法
第七章 外部分 类
K路归并
R1
R1

Rm-1
Rm

层数 [log2m]+1
遍数 [log2m]
...
M 个归并段的归并过程
讨论问题
(1) 多路归并——减少归并遍数 (2) 并行操作的缓冲区处理——使输入、输出和CPU处理尽可能重叠 (3) 初始归并段的生成
在 k 路归并时,从 k 个关键字中选择最小记录时,要比较 K-1 次。若记录总数为 n ,每遍要比较的次数为:
n*(k-1)[ log2m/log2k ] 可以看出,随着k增大,(k-1)/log2k 也增大,当归并路数多时, CPU 处理的时间也随之增多。为此要选择好的分类方法,以 减少分类中比较次数。
D.S. 数据结构与算法
第七章 外部分 类
第七章 外部分类(Sorting)
7.1 磁盘文件的归并分类 7.2 磁带文件的归并分类
首先将文件中的数据输入到内存,采用内部分类 方法进行分类(归并段),然后将有序段写回外存;对多归 并段进行多遍归并,最后形成一个有序序列。
国家示范性软件学院 2005 ·秋
相关文档
最新文档