数据结构第10章

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

第10章 外部排序
2. 分页块存储方法
为了减少存储空间的浪费,通常采用把若干个记录组合 成页块进行存储的办法,将记录间的间隙变成页块间的间隙。 一般情况下,可以把记录称为逻辑记录,而把逻辑记录组合 成的页块称为物理记录。对于上述例子,如果将100个记录 作为一个页块,则存放1000个记录仅需长度为
















1
2
3
4
5
6
7
8
图10.6 8路归并程序的选择树(胜方树)

第10章 外部排序
8
9
8
9
15
20
15
15 25

顺 串 4
图10.7 胜方树的修改
第10章 外部排序
全 局优 胜 者
6
8
9
17
10
20
12
90
10
9
20
6
8
12
90
17
10
9
20
6
8
12
90
17
14
22
第10章 外部排序
10.1.2 磁盘存储器
1. 磁盘存储器的特性
磁盘存储器主要由磁盘组和磁盘驱动器组成。磁盘组由 若干个盘片组成,每个盘片有上下两个面,盘面上涂有光滑 的磁性物质。以6片盘组为例,由于最顶上和最底下盘片的外 侧面不能使用,所以总共只有10个面可用来保存信息,能够 存储信息的盘面称为记录面。在记录盘面上有许多称为磁道 的圆圈,信息就记载在磁道上。磁盘驱动器由主轴和读/写 磁头组成,每个盘面都配有一个读/写磁头。
图10.3 内排序后得到的初始顺串
第10章 外部排序
第二步
顺串R1 顺串R1
顺串R2
顺串R1
顺串R3 顺串R2
顺串R4
顺串R5 顺串R3
顺串R6
每个顺串中的记录数 600
1200
2400
3600
图10.4 6个顺串的归并过程
第10章 外部排序
从以上归并过程可见,扫描遍数对于归并过程所需要的 时间起着关键的作用,在上例中,除了在内排序形成初始顺
串时需作一遍扫描外,各顺串的归并还需 2 2 遍扫描 把6个 长为600个记录的顺串归并为3个长为1200个3记录的顺串需要
扫 描 一 遍 ; 把 两 个 长 为 1200 个 记 录 的 顺 串 归 并 为 一 个 长 为 2400个记录的顺串需要扫描2/3遍, 把一个长为2400个记录的 顺串与另一个长为1200个记录的顺串归并在一起, 需要扫描 一遍。
第10章 外部排序
图10.12 采用非平衡分布法用三台磁带机实现2路归并
第10章 外部排序
图10.13 三带2路归并的顺串分布
第10章 外部排序
图10.14 四带3路归并的顺串分布
谢谢大家!
图10.11 磁带排序过程
第10章 外部排序
2. 非平衡归并
设初始顺串的长度为度量单位,即规定初始顺串的长度为1, 用Sn来表示某台磁带机上有n个顺串,每个顺串的长度为S。
假设初始顺串有八个,则在T1上分配五个顺串,在T2上分配 三个顺串,然后把T2上的三个顺串与T1中的三个顺串相归并, 得到三个长度为2的顺串,将它们写到T3上。下一步把T1中的两 个顺串与T3中的两个顺串相归并,得到两个长度为3的顺串,把 它们写到T2上。再下一步是把T3上一个长度为2的顺串与T2中的 一个长度为3的顺串进行归并,得到一个长度为5的顺串,将其 写到T1上。最后,把T1上一个长度为5的顺串与T2上一个长度为3 的顺串进行归并,得到一个长度为8的顺串,把它写到T3上。至 此,完成了非平衡2路归并排序。
第10章 外部排序
磁带存储器是一种典型的顺序存取设备。所谓顺序存取,就 是将记录在存储器上一个接一个地依次存放,为得到第i个记录, 必须先读第i-1个记录。磁带的存取时间主要用在定位上(即把磁 带转到待读/写信息所在的物理位置上),读/写头与所需信息 的距离越远,定位时间就越长,一般情况下,定位时间为20毫秒 至数分钟。当磁带转到信息所在位置上时才开始真正读写数据。 磁带的读写速度由走带速度和存储密度所决定, 对于存储密度 为800字节/英寸的磁带来说,每秒钟约可写800×200=160 000 字节。由于磁带机不是连续运转的设备,而是一种启停设备,因 而磁带的运转从静止到达正常的走带速度以及从正常运转到达停 止都需要一定的时间。 在启停时间内,不能对磁带进行正常读 写,因此磁带上的信息通常分为若干记录块,块与块之间留有一 定的间隙,该间隙一般为1/4~3/4英寸。
第一步,每次将三个页块(600个记录)由外存读到内存, 进行内排序,整个文件共得到6个初始顺串R1~R6 (每一个顺 串占三个页块),然后把它们写回到磁盘上去,如图10.3所示。
第10章 外部排序
顺 串 R 1
顺 串 R 2
顺 串 R 3
顺 串 R 4
顺 串 R 5
顺 串 R 6
1 ~ 6 0 0 6 0 1 ~ 1 2 0 0 1 2 0 1 ~ 1 8 0 0 1 8 0 1 ~ 2 4 0 0 2 4 0 1 ~ 3 0 0 0 3 0 0 1 ~ 3 6 0 0
第10章 外部排序
10.2 外排序的基本方法
10.2.1 磁盘排序
1.
假 设 磁 盘 上 存 有 一 文 件 , 共 有 3600 个 记 录 ( A1, A2, A3600),页块长为200个记录,供排序使用的缓冲区可提供容 纳600个记录的空间,现要对该文件进行排序,排序过程可按 如下步骤进行:
第10章 外部排序
2. 多路归并
1 2 34
56 78
9 10 11 12
13 14 15 16
图10.5 16个顺串归并的示例
第10章 外部排序
6
6
8
9
6
8
17
10
9
20
6
8
12
90
17
10
9
20
6
8
12
90
17
14
22
24
15
16
21
100
18
26
38
30
25
50
28
110
40
… … … … … … … …
第10章 外部排序
2. 分页块存储法
为了减少访问外存的次数,一般采用把记录组合成页块 的方式来进行内外存数据的交换。一个页块(简称块)是磁 盘上的一个物理记录, 通常可以容纳多个逻辑记录, 内存中 设置的缓冲区应该与页块的大小相等。每次访问记录时,需 要把一个页块读入一个缓冲区或者把一个缓冲区的数据写到 一个页块。由于在这种方式下仅当一个页块中的记录已处理 完, 接着将处理下一页的记录时才需要再次访问外存,因而 大大提高了处理效率。 分页块存储方法被广泛采用。
数据结构第10章
第10章 外部排序
目前常用的典型磁带长2400英尺1英尺=0.3048 m,宽0.5 英寸1英寸=0.0254 m,厚0.002英寸。磁带表面上涂有磁性材 料,可分为七道或九道磁带。七道磁带的每一横排中有六个 二进制数据位和一个奇偶校验位。九道磁带的每一横排中有 八个二进制数据位和一个奇偶校验位。这样的一排二进制数 据位组成一个字节。磁带的存储密度(每英寸带面上所存放 的字节数)通常为800字节/英寸和1600字节/英寸两种, 走带速度为200英寸/s。
第10章 外部排序
移 动 方向
活动臂
主轴
盘片 磁道 柱面
磁头
磁头
图10.2 活动臂示意图
第10章 外部排序
活动臂磁盘的磁头是安装在一个可活动臂上,随着活动 臂的移动, 磁头可在盘面上做同步的径向移动,从一个磁道 移到另一个磁道, 当盘面高速旋转,磁道在读/写头下通过 时,便可进行信息的读写。各记录盘面上半径相同的磁道合 在一起称为一个柱面, 柱面上各磁道在同一磁头位置下,即 活动臂移动时,实际上是把这些磁头从一个柱面移到另一个 柱面。 一个磁道内还可以分为若干段,称为扇段。因此,对 磁盘存储来说,由大到小的存储单位是: 盘片组,柱面,磁 道,扇段。以IBM2314型磁盘为例,其参数为:20个记录面 /磁盘组,200个磁道/记录面,7294字节/磁道。因此, 整个盘片组的容量为: 7294×200×200≈29 MB。
1000×0.05+1000×0.6/100=56英寸
第10章 外部排序
显然,采用分页块存储法后,可以大大节省存储空间, 而且页块越大,浪费间隙的空间越小。但是这并不等于说页 块越大越好,原因是采用分页块存储后,内外存数据交换的 基本单位为页块,而不是记录,因此需要在内存中开辟一个 数据缓冲区来暂存一个页块的内容,以便进行输入输出操作。 页块越大,则要求缓冲区越大,这势必会过多地占用内存空 间,造成读写时间过长、出错概率过大等一系列的问题, 所以应适当地选择页块的大小。 通常一个页块取1 KB~8 KB为宜。
第10章 外部排序
T1 顺串1 顺串3 顺串5 T2 顺串2 顺串4 顺串6 T3 输入文件 3600个记录
T1 顺串1 顺串3 顺串5 T2 顺串2 顺串4 顺串6 T3 顺串1 顺串3
T1 顺串1(包含2400个记录)
T2
顺串3
T4 顺串2
(a) 第一步后磁带的状况
(b) 第二步后磁带的状况
(c) 第三步后磁带的状况
第1Fra Baidu bibliotek章 外部排序
初始顺串1: 6, 8, 9, 10, 12, 14, 15, 16, 17, 20, 22, 24, 26, 30, 38, 50, 90, 100, 110
初始顺串2: 7, 11, 13, 18, 21, 25, 28, 40 (b) 生成的初始顺串
图10.10 初始顺串的生成过程
第10章 外部排序
磁盘的存取时间主要取决于寻查时间和等待时间。 磁 盘以2400~3600 r/min的速度旋转,因此平均等待时间约为 10 ms~20 ms, 而平均寻查时间约为几毫秒至几十毫秒,这 与CPU的处理速度相比较而言,仍是很慢的。因此,在讨论 外存的数据结构及其上的操作时,要尽量设法减少访问外存 的次数, 以提高磁盘存取效率。
3. 初始顺串的生成
输入文件: 10, 9, 20, 6, 8, 12, 90, 17 14,22, 7, 24, 15, 16, 11, 100, 13, 18, 26, 38, 30, 25, 50, 28, 110, 21, 40, 19, …
a 输入文件,每个记录只列出其关键字值
图10.10 初始顺串的生成过程
第10章 外部排序
©包含8个记录的败方树,并列出了新进入败方树的各记录的结 点位置及进入的次序,用符号√表示该记录不属于当前的初始顺串
图10.10 初始顺串的生成过程
第10章 外部排序
10.2.2 磁带排序
1. 磁带排序的例子
设有一个文件包含3600个记录,现在要对其进行排序, 可供 使用的磁带机有四台, 分别为T1、T2、T3、T4,可供排序用的内 存空间包含存放600个记录的空间以及一些必要的工作区设每个页 块长为200个记录。为了简化讨论,我们假定初始顺串的生成是采 用通常的内排序方法实现的。这样,一次可读入三个页块, 对其 进行排序并作为一个顺串输出。我们将采用2路归并的方法来实现 顺串的归并,因而我们使用两个输入缓冲区和一个输出缓冲区, 每个缓冲区能容纳200个记录。排序过程的具体步骤如下(假设必 要的磁带反绕动作已经隐含 并设输入文件在磁带机T4上):
24
15
16
21
1 00
18
26
38
30
25
50
28
1 10
40
… … … … … … … …
















1
2
3
4
5
6
7
8
图10.8 对应于图10.6的败方树
第10章 外部排序
全 局优 胜者
8
9 15
20
15
… …


15 25
顺 串 4
图10.9 败方树的修改
第10章 外部排序
相关文档
最新文档