第11章外排序第2讲-磁盘排序-生成初始归并段
数据结构 试题(A)-答案

3.建立平衡二叉树过程如图2所示(图中加阴影的结点表示要调整的结点)。
图2构造平衡二叉树过程
评分标准:每次调整占1分。
4.答:不能。因为在这里,二分查找只减少了关键字间的比较次数,而记录的移动次数不变,时间的复杂度仍为O(n2)。
评分标准:答对“不能”占3分,说明理由占5分。
A.872B.860
C.868D.864
8.一个具有1025个结点的二叉树的高h为。
A.11B.10
C.11~1025D.12~1024
9.一棵二叉树的后序遍历序列为DABEC,中序遍历序列为DEBAC,则先序遍历序列为。
A.ACBEDB.DECAB
C.DEABCD.CEDBA
10.对图1所示的无向图,从顶点1开始进行深度优先遍历;可得到顶点访问序列。
2.给出如下各种情况下求任意一个顶点的度的过程(只需文字描述):(8分)
(1)含n个顶点的无向图采用邻接矩阵存储;
(2)含n个顶点的无向图采用邻接表存储;
(3)含n个顶点的有向图采用邻接矩阵存储;
(4)含n个顶点的有向图采用邻接表存储。
3.将整数序列{4,5,7,2,1,3,6}中的数依次插入到一棵空的平衡二叉树中,试构造相应的平衡二叉树。(要求画出每个元素插入过程,若需调整,还需给出调整后的结果,并指出是什么类型的调整,12分)
A.输出第i(1≤i≤n)个元素值
B.交换第1个元素与第2个元素的值
C.顺序输出这n个元素的值
D.输出与给定值x相等的元素在线性表中的序号
4.设n个元素进栈序列是p1,p2,p3,…,pn,其输出序列是1,2,3,…,n,若p3=3,则p1的值。
A.可能是2B.一定是2
C++排序讲义

j j
j
j
ji
ij
ij
ij
i
i
i
二趟排序: 13 4 48 38 27 49 55 65 97 76 Ch8_3.c
希尔排序特点
子序列的构成不是简单的“逐段分割”,而是将相隔某个增 量的记录组成一个子序列 希尔排序可提高排序速度,因为 分组后n值减小,n² 更小,而T(n)=O(n² ),所以T(n)从总体 上看是减小了 关键字较小的记录跳跃式前移,在进行最后一趟增量为1 的插入排序时,序列已基本有序 增量序列取法 无除1以外的公因子 最后一个增量值必须为1
j j j j j j 排序结果:(13 27 38 49 65 76 97)
算法评价
时间复杂度 若待排序记录按关键字从小到大排列(正序) 关键字比较次数: n
1 n 1
i 2
记录移动次数:
2 2(n 1)
i 2
n
若待排序记录按关键字从大到小排列(逆序) n (n 2)(n 1) 关键字比较次数: i
§8.2 交换排序
冒泡排序
排序过程
将第一个记录的关键字与第二个记录的关键字进行比较,若 为逆序r[1].key>r[2].key,则交换;然后比较第二个记录与第 三个记录;依次类推,直至第n-1个记录和第n个记录比较为 止——第一趟冒泡排序,结果关键字最大的记录被安置在最 后一个记录上 对前n-1个记录进行第二趟冒泡排序,结果使关键字次大的记 录被安置在第n-1个记录位置 重复上述过程,直到“在一趟排序过程中没有进行过交换记 录的操作”为止
输出:13 27 38 49 50 65
76 97 50 49 38 65 27 13 输出:13 27 38 49 50 65 97 50
2023年研究生全国统考计算机试题——数据结构与操作系统试题解析

一、单项选择题1. 下列对顺序存储的有序表(长度为n)实现给定操作的算法中平均时间复杂度为O(1)的是()。
A、查找包含指定值元素的值B、插入包含指定值元素的算法C、删除第i(1≤i≤n)个元素的算法D、获取第i(1≤i≤n)个值的算法2、现有非空双向链表L,其结点结构为,prev是指向直接前驱结点的指针,next是指向直接后继结点的指针。
若要在L中指针p 所指向的结点(非尾结点)之后插入指针s指向的新结点,则在执行了语句序列:“s->next=p->next;p->next=s;”,后,还要执行()。
A、s->next->prev=p;s->prev=p;B、p->next->prev=s;s->prev=p;C、s->prev=s->next->prev; s->next->prev=s;D、p->next->prev=s->prev;s->next->prev=p;3、若采用三元组表存储结构存储稀疏矩阵M,则除三元组外,下列数据中还需要保存的是()。
I. M的行数;II.M中包含非零元素的行数;III.M的列数;IV.M中包含非零元素的列数。
A、仅I、IIIB、仅I、IIC、仅III、IVD、I、II、III、IV4、在由6个字符组成的字符集S中,各个字符出现的频次分别为3,4,5,6,8,10,为S构造的哈夫曼树的加权平均长度为()。
A、2.4B、2.5C、2.67D、2.75注:每个关键字的查找长度为:图片加权平均长度为:(3×3+3×4+3×5+3×6+2×8+2×10)/(3+4+5+6+8+10)=2.5。
如果不考虑权重,会错误计算为(3+3+3+3+2+2)/6≈2.67,从而误选C。
5、已知一棵二叉树的树形如下图所示,若其后序遍历为fdbeca,则其先序列为()。
外部排序

2 外部排序的方法
例如:假设有一个含10,000个记录的磁盘文件,而当前所用的计算机一次只能 对1,000个记录进行内部排序,则首先利用内部排序的方法得到10个初始归并 段,然后进行逐趟归并。
假设进行2 路归并(即两两归并),则第一趟由10个归并段得到5个归并段;
tIO值取决于外存,远远大于tIS和tmg。 外部排序的时间取决于读写外存的次数d。
2 外部排序的方法
例如:若对上述例子采用2 路归并,则只需进行4趟归并, 外排所需总的时间: 10*tIS+500*tIO+4*1000*tmg
若对上述例子采用5 路归并,则只需进行2趟归并,总的访问外存的次数为 100+2 100=300次
一般情况下,假设待排记录序列含 m 个初始归并段,外排时 采用 k 路归并,则归并趟数s= logkm ,显然,随着k的增大 或m的减小,归并的趟数将减少,因此对外排而言,通常采用 多路归并。k 的大小可选,但需综合考虑各种因素。
3 多路平衡归并的实现
一、多路平衡归并ቤተ መጻሕፍቲ ባይዱ性质:
•分析: m 个初始归并段,外排时采用 k 路归并,则归并趟数为 logkm , K 大, 趟数减少,读写记录的总数将减少。但 K 大,会使内部归并时间tmg增大?。
• 改进:采用胜者树或者败者树,从 K 个元素中挑选一个最小的元素仅需 log2k 次 比较,这时总的时间耗费将下降为: log2m × ( n - 1 ) × tmg
•磁带信息的表示:
一种磁化方向、代表1 另一种磁化方向,代表0
01001001 10101111
•磁带文件的组织:
外排序

外排所需总的时间为: 外排所需总的时间为:
m*tIS + d*tIO + S*u*tmg = 10*tIS + 500*tIO + 4*10000*tmg
示例: 示例:
• 设有一个包含4500个对象的输入文件。现 设有一个包含4500个对象的输入文件。 个对象的输入文件 用一台其内存至多可容纳750个对象 内存至多可容纳 个对象的计 用一台其内存至多可容纳750个对象的计 算机对该文件进行排序。输入文件放在磁 算机对该文件进行排序。 盘上,磁盘每个页块可容纳250个对象 每个页块可容纳 个对象, 盘上,磁盘每个页块可容纳250个对象, 250= 这样全部对象可存储在 4500 / 250=18 个 页块中。输出文件也放在磁盘上,用以存 页块中。输出文件也放在磁盘上, 放归并结果。 放归并结果。
一、外排序的基本过程
• 当对象以文件形式存放于磁盘上的时候,通常 当对象以文件形式存放于磁盘上的时候, 是按物理块存储的。 是按物理块存储的。 • 物理块也叫做页块,是磁盘存取的基本单位。 物理块也叫做页块,是磁盘存取的基本单位。
• 每个页块可以存放几个对象。操作系统按 每个页块可以存放几个对象。 页块对磁盘上的信息进行读写。 页块对磁盘上的信息进行读写。 • 本节所指的磁盘是由若干片磁盘组成的磁 盘组, 盘组,各个盘片安装在同一主轴上高速旋 转。各个盘面上半径相同的磁道构成了柱 各盘面设置一个读写磁头, 面。各盘面设置一个读写磁头,它们装在 同一动臂上, 同一动臂上,可以径向从一个柱面移到另 一个柱面上。 一个柱面上。
硬盘简介 磁盘的主要技术指标 柱面:多个盘片的同一磁道。 柱面:多个盘片的同一磁道。 目前常见的硬盘容量有 6.2GB、10GB、20GB、 、 、 、 40GB、60GB、80GB等等。 、 等等。 、 等等
归并排序PPT课件

.
12
10.6 基数排序
❖ “花色”优先
先分成4堆; 然后,每堆再按“面值”排; 最后,收成一堆。
扑克牌 “排序” 为例
.
13
10.6 基数排序
❖ “面值”优先
先分成13堆; 每堆再按“花色”排;
扑克牌 “排序” 为例
.
14
10.6 基数排序
❖ 多关键码排序
假设有n个记录……的序列 { R1, R2, …,Rn}
.
24
10.6.2 链式基数排序
分配 算法
.
25
10.6.2 链式基数排序
收集 算法
.
26
10.6.2 链式基数排序
❖ 性能分析
若每个关键码有d 位,需要重复执行d 趟“分配” 与“收集”。而每趟对n 个对象进行“分配”, 对r 个队列进行“收集”。总时间复杂度为O(d (n+r))。
若基数r相同,对于数据个数较多而关键码位数
.
5
初始关键字: [49] [38] [65] [97] [76] [13] [27] 一趟归并后: [38 49] [65 97] [13 76] [27] 二趟归并后: [38 49 65 97] [13 27 76] 三趟归并后: [13 27 38 49 65 76 97]
.
6
10.5 归并排序
每个记录Ri中含有d个关键字(Ki0, Ki1, …,Kid-1)。则 有序是指:对于序列中任意两个记录Ri和Rj(1≤i<j≤n) 都满足下列(词典)有序关系:
(Ki0, Ki1, …,Kid-1)< (Kj0, Kj1, …,Kjd-1) 其中K0被称为“最高”位关键字,Kd-1被称为 “最低” 位关键字。
第11章外排序第3讲-磁盘排序-多路平衡归并

2、 利用败者树实现k路平衡归并过程 败者树用于在k个记录中选取最小关键字的记录。败者
树类似于堆排序中的堆。 利用败者树实现k路平衡归并的过程是:
先建立败者树。 然后对k个输入有序段进行k路平衡归并。
7/15
【例11-2】 设有5个初始归并段,它们中各记录的关键字
分别是:
F0:{17,21,∞} F1:{5,44,∞} F2:{10,12,∞} F3:{29,32,∞} F4:{15,56,∞}
5/15
总共需要的关键字比较次数:
(k-1)/log2k在k增大时会增大
log2m × (u-1) × (k-1)/log2k
在初始归并段个数m与记录个数u确定时是常量
结论:增大归并路数k,读写磁盘次数减少,而关键字比较 次数会增大。若k增大到一定的程度,就会抵消掉由于减少读写磁 盘次数而赢得的时间。
11.2.2 多路平衡归并
1、 k路平衡归并概述 什么是k路平衡归并 2路平衡归并:每一趟从m个归并段得到m/2个归并段。 例如: m=8,k=2
log2m=3遍
一般地,2路平衡归并的前提:初始归并段的记录个数都 相同。 可以推广到k路平衡归并
1/15
影响k路平衡归并的因素 影响k路平衡归并的效率 的因素:
结论:关键字比较次数与k无关 总的内部归并时间不 会随k的增大而增大。
利用败者树实现k路平衡归并
只要内存空间允许,尽可能增大归并路数k。
12/15
13/15
采用败者树,置换-选择排序中关键字比较次数分析 共有n个记录,内存工作区WA的容量为w:
若在w个记录中选取最小关键字的采用败者树方法,每次 需要log2w次比较。 总的时间复杂度为O(n log2w)。
【外排序】外排序算法(磁盘排序、磁带排序)

【外排序】外排序算法(磁盘排序、磁带排序) 外存设备结构分析 败者树多路归并 最佳归并树白话讲解列队猫2020-06-20 21:15:46外排序外排序概述外排序的基本方法是归并排序法例子总结存储设备(可忽略)磁带磁带结构磁盘硬盘结构块硬盘上的数据定位磁盘排序磁盘排序过程1.生成初始顺串方法1(常规方法):方法2:置换-选择排序方法2.处理顺串形成有序文件1.多路平衡归并2.利用败者树实现k路平衡归并过程利用败者树实现k路平衡归并的过程是:最佳归并树最佳归并树概念存在的问题当进行k路归并时最后进行归并的归并段小于k个构造步骤磁带排序磁带多路平衡归并排序磁带多阶段归并排序外排序概述(本章设计内容后续会具体讲解)外排序是指数据存放在外存中,数据排序时涉及内、外存数据交换的排序方法。
存储在外存上的数据以文件为基本单位,由文件系统进行读写操作,读写操作的基本单位为物理块外排序的基本方法是归并排序法一、生成若干初始归并段(顺串):这一过程也称为文件预处理。
一种常规的方法如下:1. 把含有n个记录的文件,按内存大小w分成若干长度为w的子文件(归并段);2. 分别将各子文件(归并段)调入内存,采用有效的内排序方法排序后送回外存。
产生m=[n/w]个初始归并段。
此时产生的若干子文件称为顺串二、多路归并:(所谓多路归并,具体使用几路归并是看计算机内存大小的,如计算机内存为2则只能使用2路归并) 对这些初始归并段进行多遍归并,使得有序的归并段逐渐扩大,最后在外存上形成整个文件的单一归并段,也就完成了这个文件的外排序。
例子1. 将一个大文件分成M个小文件,每个小文件是有序的2. 然后我们从M个子文件中各取一个数字进入内存处理(将该数字打上队列编号标记方便后续处理)3. 比较中转站中的数据,当从中转站出来的最小数字(升序排列)就是我们最后要排序的数字之一,将其写入到归并结果文件 因为该数字打上了队列编号,所以方便我们通知对应的编号队列继续出数字进入中转站队列(保证从中转站中取出的数据是所有文件中最小的),可以看出中转站一直保存了M个记录,当中转站中的所有数字都出队完毕,则本次归并结束。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
写
F1文件
读
读
Fin文件
内存
写 F2文件
读
写…
读
写
内存
Fout文件
Fm文件
生成若干初始归并段
归并成一个有序文件
1/14
磁盘排序示例演示
设有一个文件Fin.dat,内含4500个记录:A1,A2,…, A4500,现在要对该文件进行排序,结果放在Fout.dat文件中。 可占用的内存空间至多只能对750个记录进行排序。
4/14
归并方案1:二路归并1
F1
F2
F3
F4
F5
F6
F7
F8
F9
F10
Fout
注意:
① 内存大小为750个记录,但任意大小的两个归并段都可以进行归并。 ② 每归并一次,参与归并的每个记录都要读一次和写一次。
5/14
方案1的读写记录数计算
F1
F2
F3
F4
F5
F6
F7
F1和F2中 每个记录
F8
F9
10/14
【例11-1】 设磁盘文件中共有18个记录,记录的关键字
分别为: {15,4,97,64,17,32,108,44,76,9,39,82,
56,31,80,73,255,68} 若内存工作区可容纳5个记录,用置换-选择排序可产生
几个初始归并段,每个初始归并段包含哪些记录?
11/14
置换-选择排序示例演示 18个记录(w=5): 15 4 97 64 17 32 108 44 76 9 39 82 56 31 80 73 255 68 ∞
读3次、
F10
写3次
Fout
总的读记录数(写记录数与之相同):
[(F1+F2+F3+F4的记录数) ×3+(F5+F6的记录数) ×2] =12000=8/3遍
该数越大,效率越差 等于哈夫曼树的WPL
6/14
归并方案2:二路归并2
F1
F2
F3
F4
F5
F6
F7
F8 F9
F10
Fout
方案2:总的读记录数WPL=15000。 方案1更好
abc.dat
某内排序算法
内存
abc1.dat abc2.dat
…
abcn.dat
均有序
另一种方法:采用一种称为置换-选择排序方法用于 生成初始归并段。
可以减少生成的初始归并段个数
9/14
置换-选择排序方法
(1)从待排文件Fin中按内存工作区WA的容量w读入w个记录。设归并 段编号i=1。
(2)使用败者树从WA中选出关键字最小的记录Rmin。 (3)将Rmin记录输出到Fout中,作为当前归并段的一个成员。 (4)若Fin不空,则从Fin中读入下一个记录x放在Rmin所在的工作区位置 代替Rmin。 (5)在工作区中所有≥Rmin的记录中选择出最小记录作为新的Rmin,转 (3),直到选不出这样的Rmin。 (6)设i=i+1,开始一个新的归并段。 (7)若工作区已空,则初始归并段已全部产生;否则转(2)。
方案1:总的读记录数WPL=12000。
7/14
归并方案3:三路归并
F7
F8
Fout
总的读记录数(写记录数与之相同):
方案3 :WPL=(750+750+750) ×2+ (750+750+750) ×2=9000
不同的归并方案所需要的读写记录数是不同的!
8/14
11.2.1 生成初始归并段
生成前面的初始归并段的方法
Fin.dat文件放在磁盘上。存 (750)
Fout.dat文件
2/14
第1阶段:产生初始归并段
文件Fin.dat (含4500个记录)
某种内排序方法
容量为750个记录
产生6个长度为 750个记录的有序 文件F1~F6。
3/14
第2阶段:多路归并
可用内存空间大小为750个记录 可以使用多种归并方案来完成
内存工作区w=5
Rmin=4113467895097246278
归并段1: 归并段2: 依次类推,产生归并段2:9,31,39,56,68,73,80,255
12/14
置换-选择排序中关键字比较次数分析 共有n个记录,内存工作区WA的容量为w:
若在w个记录中选取最小关键字的采用简单比较方法,每 次需要w-1次比较。 总的时间复杂度为O(nw)。
13/14
━━本讲完━━
14/14