当前位置:文档之家› 拓扑排序(精)教学内容

拓扑排序(精)教学内容


abcd 0111
2020/6/21
第八章 排序
20
拓扑排序过程
算法说明:
b
a
d
c
A B CD A0 1 1 0 B0001 C0 0 0 1 D0 0 0 0
输出:a,b,c 结点 c 处理结束
abcd 0111
2020/6/21
第八章 排序
21
拓扑排序过程
算法说明:
b
a
d
c
A B CD A0 1 1 0 B0001 C0 0 0 1 D0 0 0 0
34
AOE 网
AOE网(Activity On Edge Network) 在带权 的有向图中,用结点表示事件,用边表示活动, 边上权表示活动的开销(如持续时间),则称此 有向图为边表示活动的网络,简称AOE网。
下图是有11项 活动,9个事件的AOE网,每个事 件表示在它之前的活动已经完成, 在它之后的活动 可以开始。
基于上述思想我们讨论拓扑排序的程序设计。
2020/6/21
第八章 排序
6
第七章 图
拓扑排序的实现
我们将考虑几种实现拓扑排序过程,对于含有 回路的有向图,算法将说明,图中含有回路, 不存在拓扑排序。
2020/6/21
第八章 排序
7
拓扑排序算法说明-1
1. 存储结构:邻接矩阵与辅助结构,结点数为N
此时输出的结点序列就是图的拓扑序列
2020/6/21
第八章 排序
8
拓扑排序过程
算法说明:
b
a
d
c
A B CD A0 1 1 0 B0001 C0 0 0 1 D0 0 0 0
abcd 0112
2020/6/21
第八章 排序
9
拓扑排序过程
算法说明:
b
a
d
c
A B CD A0 1 1 0 B0001 C0 0 0 1 D0 0 0 0
心整个工程完成的最短时间是多少,哪些活动
的延迟将影响整个工程进度,而加速这些活动能 否提高整个工程的效率,因此AOE网有待研究的 问题是:
① 完成整个工程至少需要多少时间? ② 哪些活动是影响工程进度的关键活动?由于工程中
某些活动是可以并行的,所以并不是缩短任一活动 的时间都能够达到缩短整个工程工期的目的。
第八章 排序
32
AOV 网
利用AOV网络,我们试图解ቤተ መጻሕፍቲ ባይዱ决各个活动之间的关系问题, 典型的实例:
教学计划制定中课程及课程 间的先修关系可用AOV网表 示任何无环路的AOV网,其 顶点都可以排成一个拓扑序 列,并且其拓扑序列不一定 是唯一的。
33
2020/6/21
8
9 4
6
1
10
2
5
3 7
第八章 排序
AOV 图的拓扑序列,就是满足图中结点之间 次序制约关系的结点序列。
2020/6/21
第八章 排序
5
拓扑排序的控制思想
有向无环图,至少存在一个以上入度为0的结点, 该类结点就是拓扑序列的起始结点,在工程上就表 示工程中第一步可做的工作。
处理一个结点的操作就是删除该结点的所有出边。 这一操作的结果可以导致,当某一结点的直接前驱 结点都处理完成,则该结点的入度就为0了。在课 程设置上表示,当某课程的所有先修课都学过了, 这门课程就可以选修(激活)了。
输出:a,b 计算结点的入度(列)
abcd 0111
2020/6/21
第八章 排序
17
拓扑排序过程
算法说明:
b
a
d
c
A B CD A0 1 1 0 B0001 C0 0 0 1 D0 0 0 0
输出:a,b,c ..
abcd 0111
2020/6/21
第八章 排序
18
拓扑排序过程
算法说明:
b
实例2 :课程设置,包含先休课程之间的制约 关系
实例3 :房屋装修,墙壁,门框,地板,门
2020/6/21
第八章 排序
3
第七章 图
拓扑排序要求与特点:
对于有向无环图结点的一种排序 若结点V与结点U之间存在V到U的边,则在拓
扑序列中结点V一定排列在结点U之前。 最终的结果是一个满足时间制约关系结点序列 存在环路的有向图不存在拓扑序列。因为环路
输出:a,b,c 调整结点入度(列)
abcd 0110
2020/6/21
第八章 排序
22
拓扑排序过程
算法说明:
b
a
d
c
A B CD A0 1 1 0 B0001 C0 0 0 1 D0 0 0 0
输出:a,b,c,d ….
abcd 0110
2020/6/21
第八章 排序
23
拓扑排序算法--2 处理过程使用堆
工程能否顺利完成?(AOV网络) 工程完成所必需的最短时间?(AOE网络)
2020/6/21
第八章 排序
31
AOV 网
AOV(Activity On Vertex Network) : 用顶点表示活动,用边表示活动间的优先 (制约) 关系的有向图,称为顶点表示活动 的网络,简称为AOV网。
2020/6/21
abcd 0112
2020/6/21
第八章 排序
15
拓扑排序过程
算法说明:
b
a
d
c
A B CD A0 1 1 0 B0001 C0 0 0 1 D0 0 0 0
输出:a,b 作结点 b 结束标志
abcd 0002
2020/6/21
第八章 排序
16
拓扑排序过程
算法说明:
b
a
d
c
A B CD A0 1 1 0 B0001 C0 0 0 1 D0 0 0 0
存邻接储 接 表结 表 选构 : 择: 表 出邻 头 边接 带 邻表有接,数表处据(理域课结,本点记算记录法录节过栈得只队数 点程和到是列组 的)队拓序能入列扑列够度都序不反可列同映,以,。并邻
处理过程: 1. 计算各个结点的入度
行展开的结点的 状态。
2. 选择入度为零的结点进栈st
3. 从堆栈中取出节点 i = st[top]
4. 根据邻接表adj,将节点 i 的所有直接后继结点 的入度-1,若入度为0则结点进栈
5. 重复 3-4,直到栈空
2020/6/21
第八章 排序
24
拓扑排序算法--3
存储结构:邻接表,处理结点记录数组 邻接表:表头带有数据域,记录节点的入
度,邻接表选择出边邻接表 处理过程:
1. 计算各个结点的入度 2. 选择入度为零且尚未处理过的结点k 3. 根据邻接表,将所有直接后继结点的入度-1 4. 标记结点处理结束,即入度标记为-1 5. 重复2-4,直到所有的结点入度标记为-1
2020/6/21
第八章 排序
38
关键路径与关键活动性质分析
考察关键路径描述的特征点(参数):
① 事件Vj 的可能发生的最早时间 VE(j) :是从源点 V1 到顶点Vj 的最长路径长度。
② 活动ai 可能开始的最早时刻 E(k):设活动 ai 在 边< Vj , Vk>上, 则 E(i) 也就是从源点 V1 到顶点 Vj 的最长路径长度。这是因为事件Vj发生表明以Vj 为起点的所有活动ai可以立即开始。
输出:a 建立a的处理结束标记
abcd 0112
2020/6/21
第八章 排序
12
拓扑排序过程
算法说明:
b
a
d
c
A B CD A0 1 1 0 B0001 C0 0 0 1 D0 0 0 0
输出:a 计算结点入边(列)
abcd 0112
2020/6/21
第八章 排序
13
拓扑排序过程
算法说明:
导致序列不可能满足上述原则。 一个有向无环图的拓扑序列不唯一。
2020/6/21
第八章 排序
4
AOV图
与拓扑排序有关的概念
AOV图:有向无环图的一种名称,由于这种 图往往只由活动于它们次序间的制约关系构成, 所以图又称为“活动网络”,英文表示为: Activity On Vertex AOV(活动顶点)。 通常,拓扑排序就是针对 AOV 图来考虑的。
2020/6/21
第八章 排序
25
拓扑排序算法
1. 构建邻接表存储结构
结点结构:struct node { vertex data; struct node *next;}
头指针数组结构: typedef struct { vertex data; //结点标志key int count; //入度记录 struct node *firstarc; } headv; headv h[total]; struct node *wp;
输出:a
abcd 0112
2020/6/21
第八章 排序
10
拓扑排序过程
算法说明:
b
a
d
c
A B CD A0 1 1 0 B0001 C0 0 0 1 D0 0 0 0
输出:a 删除 a 的所有出边
abcd 0112
2020/6/21
第八章 排序
11
拓扑排序过程
算法说明:
b
a
d
c
A B CD A0 1 1 0 B0001 C0 0 0 1 D0 0 0 0
b
a
d
c
A B CD A0 1 1 0 B0001 C0 0 0 1 D0 0 0 0
输出:a,b 删除 b 的出边
相关主题