240 likes | 332 Views
6. 5. 1. 5. 5. 6. 4. 3. V2. V0. V3. V1. V5. V4. 2. 6. 克鲁斯卡尔算法. 基本步骤 设 G= ( V , E )为一个具有 n 个顶点的带权的连通网络,最小生成树的初始状态为有 n 个顶点但无边的非连通图 T= ( V , )。将 E 中的边按权值的递增顺序排序,选择权值最小的边,若与其相关的顶点落在 T 中不同的连通分量上,则将其加入 T 中,否则,将其弃舍。循环至所有顶点在同一的连通分量上。. 如何识别一条边所相关的顶点是否落 在同一个连通分量上?可将一个连通
E N D
6 5 1 5 5 6 4 3 V2 V0 V3 V1 V5 V4 2 6 • 克鲁斯卡尔算法 • 基本步骤 • 设G=(V,E)为一个具有n个顶点的带权的连通网络,最小生成树的初始状态为有n 个顶点但无边的非连通图 T=(V, )。将E 中的边按权值的递增顺序排序,选择权值最小的边,若与其相关的顶点落在T 中不同的连通分量上,则将其加入T 中,否则,将其弃舍。循环至所有顶点在同一的连通分量上。 如何识别一条边所相关的顶点是否落 在同一个连通分量上?可将一个连通 分量的所有顶点看成一个集合,当从 E中取出一条边( xi, xj )时,若xi, xj 在同一集合u 中,则将该边弃舍; 否则,则将该边加入到T 中,并将xj 所在的集合v 并入集合u 中。
45 50 10 V3 V4 V1 V2 V5 V0 35 10 20 20 30 15 5 问题的提出 交通咨询系统、通讯网、计算机网络常要寻找两结点间最短路径 交通咨询系统:A 到B 最短路径 计算机网发送Email节省费用A到B沿最短路径传送 路径长度:路径上边数 路径上边的权值之和 最短路径:两结点间权值之和最小的路径 例:求V0到V4最短路径 V0到V4 路径:V0 V4 45 V0 V1 V4 60 V0 V2 V3 V4 60 V0 V2 V3 V1 V4 55
从某源点到其余各点的最短路径 带权值的有向图的单源最短路径问题 如何求从某源点 到其余各点的最短路径? ?
迪杰斯特拉算法(Dijkstra) • Dijkstra算法的基本思想 • 按路径长度递增顺序求最短路径算法 。与求最小生成树的普里姆算法类似 • Dijkstra 算法的基本步骤 • 设V0是起始源点,U = 已求得最短路径终点集合。V-U = 未确定最短路径的顶点的集合 • 初始时 U ={V0} • 1)下一条长度最短的路径: • ① Vi V - U ,先求出V0 到Vi 中间只经 U 中结点的最短路径; • ② 上述最短路径中长度最小者即为下一条长度最短的路径; • ③ 将所求最短路径的终点加入U 中; • 2)重复1)直到求出所有的最短路径
V5 100 60 30 10 20 10 V4 V0 V1 V2 V3 50 5 始点 终点 最短路径 路径长度 V0 V1 无 V2 (V0,V2) 10 V3 (V0,V4,V3) 50 V4 (V0,V4) 30 V5 (V0,V4,V3,V5) 60
AOV网 V5 V3 V2 V0 V1 V4 V6 有向无环图:没有回路的有向图 应用: 工程流程、生产过程中各道工序的流程、程序流程、课程的流程 AOV网( activity on vertex net ) 用顶点表示活动,边表示活动的顺序关系的有向图称为AOV网 例 某工程可分为7个子工程,若用顶点表示子工程(也称活动), 用弧表示子工程间的顺序关系。工程流程可用如下AOV网表示
V5 V3 V2 V0 V1 V4 V6 AOV网与拓扑排序 对工程问题,人们至少关心如下两类问题: 1)工程能否顺序进行,即工程流程是否“合理”2)完成整项工程至少需要多少时间,哪些子工程是影响工程进度的关键子工程 为求解工程流程是否“合理”,通常用AOV网的有向图表示工程流程 例1 某工程可分为V0、V1、V2、V3、V4、V5、V6 7个子工程, 工程流程可用如下AOV网表示。其中顶点:表示子工程(也称活动), 弧:表示子工程间的顺序关系。
例 课程流程图 某校计算机专业课程流程可AOV网表示。其中顶点:表示课程(也称活动), 弧:表示课程间的先修关系; 课程编号 课程名称 先决条件 c4 c5 程序设计 离散数学 数据结构 汇编语言 算法分析 计算机体系 编译方法 操作系统 高等数学 线性代数 电子电路 数值分析 无 c1 c1,c2 c1 c3,c4 c11 c5,c3 c3,c6 无 c9 c9 c9,c10,c1 c1 c2 c3 c4 c5 c6 c7 C8 c9 c10 c11 c12 c2 c1 c3 c7 c12 c9 c10 c6 c3 c11 如何安排施工计划? 如何安排教学计划? ?
c4 c5 c2 c1 c3 c7 c12 V2 V5 V3 V4 V1 V0 V6 c9 c10 c6 c3 c11 一个可行的施工计划为:V0,V1,V2, V4,V3,V5,V6, 一个可行的学习计划为:C1,C9,C4,C2,C10,C11,C12,C3,C6,C5,C7,C8 可行的计划的特点:若在流程图中顶点v是顶点u 的前趋,则在计划序列中顶点v 也是u的前趋。
V5 V3 V2 V0 V1 V4 V6 拓扑序列:有向图D的一个顶点序列称作一个拓扑序列,如果该序列中任两顶点v 、u ,若在D中v是u前趋,则在序列中v也是u前趋。拓扑排序: 就是将有向图中顶点排成拓扑序列。拓扑排序的应用 安排施工计划(如上) 判断工程流程的是否合理 如何判断AOV网(有向图) 是否存在有向回路? AOV网(有向图) 不存在有向回路 当且仅当能对AOV网 进行拓扑排序 ?
如何在计算机上实现 对有向图的拓扑排序? V5 V3 V2 V0 V1 V4 V6 ? 拓扑排序方法:1)在有向图选一无前趋的顶点v,输出;2)从有向图中删除v及以v为尾的孤;3)重复1、2、直接全部输出全部顶点或有向图中不存在无前趋顶点;例:V0,V1,V2,V3,V4,V5,V6
拓扑排序算法 1)拓扑排序方法的另一种描述(等价描述) (1) 选择一入度为 0 顶点 v,输出;(2) 将 v 邻接到的顶点的入度减1;(3)重复1、2 直到输出全部顶点或有向图没有入度为0的顶点; 2)拓扑排序涉及的数据和操作: 数据:有向图,顶点的入度; 操作: (1) 选择一入度为 0 顶点v,输出; (2) 将 v 邻接到的顶点 u 的入度减1;
V4 V1 V6 V5 V3 V2 a4=3 a1=3 a8=1 a3=2 a7=2 a5=4 a2=2 a6=3 ak Vj Vi AOE网与关键路径 对工程人们关心两类问题: 1)工程能否顺序进行,即工程流程是否“合理”2)完成整项工程至少需要多少时间,哪些子工程是影响工程进度的关键子工程? 顶点表示事件 AOE网 边表示活动 事件Vj发生表示 akj已结束 事件Vi发生表示 ak可以开始
AOE网与关键路径 • 如果在无有向环的带权有向图中 • 用有向边表示一个工程中的活动(Activity) • 用边上权值表示活动持续时间(Duration) • 用顶点表示事件 (Event) • 则这样的有向图叫做用边表示活动的网络,简称 AOE (Activity On Edges) 网络。 • AOE网络在某些工程估算方面非常有用。例如,可以使人们了解: (1) 完成整个工程至少需要多少时间(假设网络中没有环)?
在AOE网络中, 有些活动顺序进行,有些活动并行进行。 • 从源点到各个顶点,以至从源点到汇点的有向路径可能不止一条。这些路径的长度也可能不同。完成不同路径的活动所需的时间虽然不同,但只有各条路径上所有活动都完成了,整个工程才算完成。 • 因此,完成整个工程所需的时间取决于从源点到汇点的最长路径长度,即在这条路径上所有活动的持续时间之和。这条路径长度最长的路径就叫做关键路径(Critical Path)。
V4 V1 V6 V5 V3 V2 a4=3 a1=3 a8=1 a3=2 a7=2 a5=4 a2=2 a6=3 ak Vj Vi 要找出关键路径,必须找出关键活动,即不按期完成就会影响整个工程完成的活动。 关键路径上的所有活动都是关键活动。因此,只要找到了关键活动,就可以找到关键路径. 例如,下图就是一个AOE网。 顶点表示事件 AOE网 边表示活动 事件Vj发生表示 akj已结束 事件Vi发生表示 ak可以开始
a3=3 a8=4 v1 v3 v5 a13=14 a0=8 a9=19 a4=10 v0 v2 a10=8 v6 v9 a1=6 a5=9 a14=10 a11=2 v8 a2=7 a6=9 a12=6 v4 v7 a7=13 关键路径求解方法: • 在AOE网中从源点v0到事件vi的最长路径长度是事件vi的最早发生时间。这个时间决定了所有以vi为尾的弧表示的活动的最早开始时间。
定义以下几个量: • e(i):表示活动ai的最早开始时间。 • l(i):表示活动最迟开始时间的向量。 关键活动特征:e(i)=l(i) l(j)-e(j)的值表示完成活动aj的时间余量,提前完成非关键活动并不能提高整个工程的进度。 • 事件可能的最早开始时间ve(i):对于某一事件vi,它可能的最早发生时间ve(i)是从源点到顶点vi的最大路径长度。
ve(0)=0; ve(i)= vi 集合p(i) • 事件允许的最晚发生时间vl(i):对于某一事件vi,它允许的最晚发生时间是在保证按时完成整个工程的前提下,该事件最晚必须发生的时间
对于图8.25所示的AOE网络,可按其中的一个拓扑序列(v0、v1、v2、v4、v3、v6、v7、v5、v8、v9)求解每个事件的最早开始时间:对于图8.25所示的AOE网络,可按其中的一个拓扑序列(v0、v1、v2、v4、v3、v6、v7、v5、v8、v9)求解每个事件的最早开始时间: ve(0)=0 ve(1)= 8,ve(2)=6,ve(4)=7; ve(3)=max{ve(1)+len(a3),ve(2)+len(a4)}=16; ve(6)=max{ve(2)+len(a5),ve(4)+len(a6)}=16; ve(7)=max{ve(6)+len(a11),ve(4)+len(a7)}=20; ve(5)= ve(3)+len(a8)=20; ve(8)=max{ve(3)+len(a9),ve(6)+len(a10),ve(7)+len(a12)}=35; ve(9)=max{ve(5)+len(a13),ve(8)+len(a14)}=45;
vi vl(n-1)=ve(n-1); vl(i)= 集合s(i) e(k)=ve(i); l(k)=vl(j)-len(<vi,vj>); 求每一个顶点i的最晚允许发生时间vl(i)可以沿图中的汇点开始,按图中的逆拓扑序逐个递推出每个顶点的vl(i)。
对于图8.25所示的AOE网,按照(8-7)式求得的各个事件允许的最晚发生时间如下:对于图8.25所示的AOE网,按照(8-7)式求得的各个事件允许的最晚发生时间如下: vl(9)=ve(9)=45 vl(8)=vl(9)-len(<v8,v9>)=45-10=35 vl(5)=vl(9)-len(<v5,v9>)=45-14=31 vl(7)=vl(8)-len(<v7,v8>)=35-6=29 vl(6)=min{vl(7)-len(<v6,v7>),vl(8)-len(<v6,v8>)}=min{27,27}=27 vl(3)=min{vl(5)-len(<v3,v5>),vl(8)-len(<v3,v8>)}=min{27,16}=16 vl(4)=min{vl(6)-len(<v4,v6>),vl(7)-len(<v4,v7>)}=min{18,16}=16
vl(2)=min{vl(3)-len(<v2,v3>),vl(6)-len(<v2,v6>)}=min{6,18}=6vl(2)=min{vl(3)-len(<v2,v3>),vl(6)-len(<v2,v6>)}=min{6,18}=6 vl(1)=vl(3)-len(<v1,v3>)=13 vl(0)=min{vl(1)-8,vl(2)-6,vl(4)-7}=min{5,0,9}=0
顶点 ve vl 活动 e l l-e 关键 活动 v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 0 8 6 16 7 20 16 20 35 45 0 13 6 16 16 31 27 29 35 45 a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 0 0 0 8 6 6 7 7 16 16 16 16 20 20 35 5 0 9 13 6 18 18 16 27 16 27 27 29 31 35 5 0 9 5 0 12 11 9 11 0 11 11 9 11 0 √ √ √ √