收藏 分享(赏)

图的常见应用.ppt

上传人:weiwoduzun 文档编号:5679213 上传时间:2019-03-12 格式:PPT 页数:48 大小:1.36MB
下载 相关 举报
图的常见应用.ppt_第1页
第1页 / 共48页
图的常见应用.ppt_第2页
第2页 / 共48页
图的常见应用.ppt_第3页
第3页 / 共48页
图的常见应用.ppt_第4页
第4页 / 共48页
图的常见应用.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

1、第九章 图,本节主要内容:1、最小生成树算法2、最短路径3、拓扑排序4、关键路径,9.5 最小生成树,1.基本概念,一个有n个顶点的连通图的生成树是原图的极小连通子图,它包含原图中的所有n个顶点,并且有保持图连通的最少的边。,(1)若在生成树中删除一条边就会使该生成树因变成非连通图而不再满足生成树的定义; (2)若在生成树中增加一条边就会使该生成树中因存在回路而不再满足生成树的定义; (3)一个连通图的生成树可能有许多; (4)有n个顶点的无向连通图,无论它的生成树的形状如何,一定有且只有n-1条边。,无向图和它的不同的生成树,如果无向连通图是一个带权图,那么它的所有生成树中必有一棵边的权值总

2、和最小的生成树,我们称这棵生成树为最小代价生成树,简称最小生成树。,构造有n个顶点的无向连通带权图的最小生成树必须满足以下三条: (1)构造的最小生成树必须包括n个顶点; (2)构造的最小生成树中有且只有n-1条边; (3)构造的最小生成树中不存在回路。,典型的构造方法有两种,一种称作普里姆(Prim)算法,另一种称作克鲁斯卡尔(Kruskal)算法。,2.普里姆算法,一、算法思想,假设G=(V,E)为一个带权图,其中V为带权图中顶点的集合,E为带权图中边的权值集合。设置两个新的集合U和T,其中U用于存放带权图G的最小生成树的顶点的集合,T用于存放带权图G的最小生成树的权值的集合。普里姆算法思

3、想是:令集合U的初值为U=u0(即假设构造最小生成树时从顶点u0开始),集合T的初值为T=。从所有顶点uU和顶点vV-U的带权边中选出具有最小权值的边(u,v),将顶点v加入集合U中,将边(u,v) 加入集合T中。如此不断重复,当U=V时则最小生成树构造完毕。此时集合U中存放着最小生成树顶点的集合,集合T中存放着最小生成树边的权值集合。,图9-10 普里姆算法构造最小生成树的过程,图9-10 普里姆算法构造最小生成树的过程,图9-10 普里姆算法构造最小生成树的过程,3.克鲁斯卡尔算法,克鲁斯卡尔算法是一种按照带权图中边的权值的递增顺序构造最小生成树的方法。设无向连通带权图G=(V,E),其中

4、V为顶点的集合,E为边的集合。克鲁斯卡尔算法思想是:设带权图G的最小生成树T由顶点集合和边的集合构成,其初值为T=(V,),即初始时最小生成树T只由带权图G中的顶点集合组成,各顶点之间没有一条边。这样,最小生成树T中的各个顶点各自构成一个连通分量。然后,按照边的权值递增的顺序考察带权图G中的边集合E中的各条边,若被考察的边的两个顶点属于T的两个不同的连通分量,则将此边加入到最小生成树T,同时把两个连通分量连接为一个连通分量;若被考察的边的两个顶点属于T的同一个连通分量,则将此边舍去。如此下去,当T中的连通分量个数为1时,T中的该连通分量即为带权图G的一棵最小生成树,克鲁斯卡尔算法构造最小生成树

5、的过程,克鲁斯卡尔算法构造最小生成树的过程,9.6 最短路径,1.基本概念,路径长度:一条路径上所经过的边的数目,带权路径长度:路径上所经过边的权值之和,最短路径:(带权)路径长度(值)最小的那条路径,图9-13 (a)有向带权图; (b)邻接矩阵,2.从一个顶点到其余各顶点的最短路径,一、狄克斯特拉算法思想,按路径长度递增的顺序逐步产生最短路径。狄克斯特拉算法的思想是:设置两个顶点的集合S和T,集合S中存放已找到最短路径的顶点,集合T中存放当前还未找到最短路径的顶点。初始状态时,集合S中只包含源点,设为v0,然后从集合T中选择到源点v0路径长度最短的顶点u加入到集合S中,集合S中每加入一个新

6、的顶点u都要修改源点v0到集合T中剩余顶点的当前最短路径长度值,集合T中各顶点的新的当前最短路径长度值,为原来的当前最短路径长度值与从源点过顶点u到达该顶点的路径长度中的较小者。此过程不断重复,直到集合T中的顶点全部加入到集合S中为止。,狄克斯特拉算法求从顶点A到其余各顶点最短路径的过程,3.每对顶点之间的最短路径,带权有向图,每对顶点之间的最短路径可通过调用狄克斯特拉算法实现。具体方法是:每次以不同的顶点作为源点,调用狄克斯特拉算法求出从该源点到其余顶点的最短路径。重复n次就可求出每对顶点之间的最短路径。由于狄克斯特拉算法的时间复杂度为O(n2),所以这种算法的时间复杂度为O(n3)。,弗洛

7、伊德算法的思想是:设矩阵cost用来存放带权有向图G的权值,即矩阵元素costij中存放着下标为i的顶点到下标为j的顶点之间的权值,可以通过递推构造一个矩阵序列A0,A1,A2,AN来求每对顶点之间的最短路径。其中,Akij(0kn)表示从顶点vi到顶点vj的路径上所经过的顶点下标不大于k的最短路径长度。初始时有,A0ij=costij。,有向无环图及其应用1 有向无环图的概念2 AOV网与拓扑排序3 AOE图与关键路径,1 有向无环图的概念,一个无环的有向图称做有向无环图(directed acycline praph)。简称DAG图。DAG图是一类较特殊的有向图,下图给出了有向树、DAG图

8、和有向图的例子。,(1) 有向无环图是描述含有公共子式的表达式的有效工具:例如下述表达式:(a+b)*(b*(c+d)+(c+d)*e)*(c+d)*e)可以用第六章讨论的二叉树来表示,如下图所示。,仔细观察该表达式,可发现有一些相同的子表达式,如(c+d)和(c+d)*e等,在二叉树中,它们也重复出现。若利用有向无环图,则可实现对相同子式的共享,从而节省存储空间。例如下图所示为表示同一表达式的有向无环图。,(2)无环图是描述一项工程或系统的进行过程的有效工具:除最简单的情况之外,几乎所有的工程(project)都可分为若干个称作活动(activity)的子工程,而这些子工程之间,通常受着一定

9、条件的约束,如其中某些子工程的开始必须在另一些子工程完成之后。对整个工程和系统,人们关心的是两个方面的问题:一是工程能否顺利进行:二是估算整个工程完成所必须的最短时间。我们也在这一节讨论这一问题。,2 AOV网与拓扑排序,1AOV网 (顶点表示活动的网) (1) AOV概念:顶点表示活动,弧表示活动之间存在的制约关系网称为AOV。 (2) 用AOV表示一个工程:概念所有的工程或者某种流程可以分为若干个小的工程或阶段,这些小的工程或阶段就称为活动。若以图中的顶点来表示活动,有向边表示活动之间的优先关系,则这样活动在顶点上的有向图称为AOV网。在AOV网中,若从顶点i到顶点j之间存在一条有向路径,

10、称顶点i是顶点j的前驱,或者称顶点j是顶点i 的后继。若是图中的弧,则称顶点i是顶点j的直接前驱,顶点j 是顶点i的直接后驱。,9.7 拓扑排序,1偏序关系和全序关系拓扑排序就是要由某个集合上的偏序关系得到该集合上的全序关系。若集合X上的关系R是自反的、反对称的和传递的,则称关系R是集合X上的偏序关系(或称半序关系)。设关系R为定义在集合X上的二元关系,若对于每一个xX,都有(x,x)R,则称R是自反的。设关系R为定义在集合X上的二元关系,如果对于任意的x,y,zX,若当(x,y)R且(y,z)R时,有(x,z)R,则称关系R是传递的。,偏序关系的实质是在集合X的元素之间建立层次结构。这种层次

11、结构是依赖于偏序关系的可比性建立起来的。但是,偏序关系不能保证集合X中的任意两个元素之间都能比较。而全序关系可以保证集合中的任意两个元素之间都可以比较。,对于AOV网的拓扑排序就是将AOV网中的所有顶点排成一个线性序列。拓扑排序实际上就是要由某个集合上的一个偏序关系得到该集合上的一个全序关系。,下图给出在一个AOV网上实施上述步骤的例子。,例如:计算机专业的学生必须完成一系列规定的基础课和专业课才能毕业。,4有向图的拓扑排序算法有向图的拓扑排序算法:(1) 在有向图中选择一个没有前驱的顶点,并把它输出;(2) 从有向图中删去该顶点以及与它相关的有向边。重复上述两个步骤,直到所有顶点都输出,或者

12、剩余的顶点中找不到没有前驱的顶点。在前一种情况下,顶点的输出序列就是一个拓扑序列;后一种情况则说明有向图中存在回路,如果有向图中存在回路,则该有向图一定无法得到一个拓扑序列。,上述算法仅能得到有向图的一个拓扑序列。改进上述算法,可以得到有向图的所有拓扑序列。如果一个有向图存在一个拓扑序列,通常表示该有向图对应的某个施工流程图的一种施工方案切实可行;而如果一个有向图不存在一个拓扑序列,则说明该有向图对应的某个施工流程图存在设计问题,不存在切实可行的任何一种施工方案。,例:对于如下图所示的AOV网,写出利用拓扑排序算法得到的一个拓扑序列。解:根据拓扑排序算法,得到的一个拓扑序列为0,1,7,2,4

13、,8,5,9,3,6。,建筑工程拓扑排序问题,3 AOE图与关键路径,1AOE网(边表示活动的网)(1) AOE网概念:若在带权的有向图中,以顶点表示事件,以有向边表示活动,边上的权值表示活动的开销(如该活动持续的时间),则此带权的有向图称为AOE网。(2)AOE网表示一项工程能表示出:完成预定工程计划所需要进行的活动;每个活动计划完成的时间;要发生哪些事件以及这些事件与活动之间的关系;,(3) 通过AOE网可以求得:估算工程完成的时间确定哪些活动是影响工程进度的关键。 (4) AOE网的两个特点:只有在某顶点所代表的事件发生后,从该顶点出发的各有向边所代表的活动才能开始。只有在进入一某顶点的

14、各有向边所代表的活动都已经结束,该顶点所代表的事件才能发生。,a9=6,a6=4,a2=7,a1=5,a3=3,a4=6,a5=3,a7=5,a8=4,a10=5,a11=8,a14=9,a12=2,a13=8,a15=3,图9-19 AOE网,基本概念: 路径长度:AOE网的一条路径上所有活动的总和称为该路径的长度。 关键路径:在AOE网中,从源点到汇点的所有路径中,具有最大路径长度的路径称为关键路径。 关键活动:关键路径上的活动称为关键活动。 显然,完成整个工程的最短时间就是AOE网中关键路径的长度,也就是AOE网中各关键活动所持续时间的总和。 例:找出前图所示的AOE网中的关键路径。 解

15、:在AOE网中,从源点v0到汇点v9共有13条路径,分别计算这13条路径的长度,得到最大路径长度为31。最大路径长度对应的关键路径为(v0,v2,v3,v4,v6,v9) 和(v0,v2,v3,v4,v7,v9)。,3几个参数的定义 活动的持续时间dut():对于有向边代表的活动,dut()是该有向边的权值。事件可能的最早开始时间e(k):对于顶点k代表的事件,e(k)是从源点到该顶点的最大路径长度。在一个有n+1个事件的AOE网中, 源点0的最早开始时间e(0)等于0。事件k(k=1,2,3,n)可能的最早开始时间e(k)可用递推公式表示为:,活动可能的最早开始时间e(i):对于有向边ai代

16、表的活动,e(i)是该活动的弧尾事件可能的最早发生时间。假设活动ai代表的是有向边,即ai是关联事件j和事件k的的活动,则e(i) =e(j)。 活动允许的最晚开始时间l(i):对于有向边ai代表的活动,l(i)是该活动的弧头事件允许的最晚发生时间减去该活动持续的时间。l(i)是在不推迟整个工程完成的前提下,活动ai必须开始的时间。假设活动ai代表的是有向边,即ai是关联事件j和事件k的的活动,则l(i) = l(k) - dut()。这样,每个活动允许的时间余量就是l(i) - e(i)。而关键活动就是l(i) - e(i) = 0的那些活动,即可能的最早开始时间e(i)等于允许的最晚开始时

17、间l(i)的那些活动就是关键活动。,4寻找关键活动的算法求AOE网中关键活动的算法步骤为:(1)建立包含n+1个顶点、e条有向边的AOE网。其中,顶点v0为源点,顶点vn为汇点;(2)根据有向图的拓扑排序算法,求出AOE网的拓扑序列。如果AOE网中存在环,拓扑序列不存在,则无法得到AOE网的关键活动,算法失败退出;(3)从源点v0开始,令源点v0的最早开始时间ve0=0,按拓扑序列求其余各顶点k(k=1,2,3,n)的最早开始时间vek;(4)从汇点vn开始,令汇点vn的最晚发生时间vln=ven,按逆拓扑序列求其余各顶点k(k=n-1,n-2,2,1,0)的最晚发生时间vlk;(5)计算每个

18、活动的最早开始时间ek (k=1,2,3,e);(6)计算每个活动的最晚开始时间lk (k=1,2,3,e);(7)找出所有ek= lk的活动k,这些活动即为AOE网的关键活动。,下图给出了一个具有15个活动、11个事件的假想工程的AOE网。v1,v2, v11分别表示一个事件;,分别表示一个活动;用a1,a2, ,a15代表这些活动。其中,v1称为源点,是整个工程的开始点,其入度为0;v11为终点,是整个工程的结束点,其出度为0 。 对于AOE网,可采用与AOV网一样的邻接表存储方式。其中,邻接表中边结点的域为该边的权值,即该有向边代表的活动所持续的时间。,5、求关键路径的过程下面以前图所示

19、的AOE网为例,求出上述参量,来确定该网的关键活动和关键路径。(1) 按照式6-1求事件的最早发生时间vekve 1=0ve 2=3ve 3=4ve 4=ve2+2=5ve 5=maxve2+1,ve3+3=7ve 6=ve3+5=9ve 7=maxve4+6,ve5+8=15ve 8=ve5+4=11ve 9=maxve8+10,ve6+2=21ve 10=maxve8+4,ve9+1=22ve 11=maxve7+7,ve10+6=28,(2) 按照式6-2求事件的最迟发生时间vlk。vl 11= ve 11=28vl 10= vl 11-6=22vl 9= vl 10-1=21vl 8=

20、min vl 10-4, vl 9-10=11vl 7= vl 11-7=21vl 6= vl 9-2=19vl 5=min vl 7-8,vl 8-4=7vl 4= vl 7-6=15vl 3=min vl 5-3, vl 6-5=4vl 2=min vl 4-2, vl 5-1=6vl 1=minvl 2-3, vl 3-4=0,(3) 按照 (6-3)式和(6-4)式求活动ai的最早开始时间ei和最晚开始时间li 活动a1 e 1=ve 1=0 l 1=vl 2 -3 =3 活动a2 e 2=ve 1=0 l 2=vl 3 - 4=0 活动a3 e 3=ve 2=3 l 3=vl 4 -

21、 2=13 活动a4 e 4=ve 2=3 l 4=vl 5 - 1=6 活动a5 e 5=ve 3=4 l 5=vl 5 - 3=4 活动a6 e 6=ve 3=4 l 6=vl 6 - 5=14 活动a7 e 7=ve 4=5 l 7=vl 7 - 6=15 活动a8 e 8=ve 5=7 l 8=vl 7 - 8=13 活动a9 e 9=ve 5=7 l 9=vl 8 - 4=7 活动a10 e 10=ve 6=9 l 10=vl 9 - 2=19 活动a11 e 11=ve 7=15 l 11=vl 11 - 7=21 活动a12 e 12=ve 8=11 l 12=vl 10 - 4

22、=18 活动a13 e 13=ve 8=11 l 13=vl 9 - 10=11 活动a14 e 14=ve 9=21 l 14=vl 10 -1=21 活动a15 e 15=ve 10=22 l 15=vl 11 -6 =22,(5) 求关键路径:比较ei和li的值可判断出a2,a5,a9,a13,a14,a15是关键活动,关键路径如下图所示。,5AOE网的应用实践证明,用AOE网来估算工程的完成时间是非常有用的。另外,根据前面的讨论可知,AOE网中的关键活动的持续时间是限制整个工程进度的主要因素,要缩短整个工程的时间进度,就要力争缩短关键活动的持续时间。,例9-7 对于图9-19所示的AO

23、E网,要求: (1)计算各个事件vk的最早开始时间e(k) (2)给出整个工程最少需要的时间; (3)计算各个事件vk的最晚发生时间l(k); (4)计算各个活动ai的最早开始时间e(i); (5)计算各个活动ai的最晚开始时间l(i); (6)找出所有的关键活动和关键路径。,计算过程:(1)从源点v0开始,令源点v0的最早开始时间ve0=0,按拓扑序列求其余各顶点k(k=1,2,3,n)的最早开始时间vek;(2)从汇点vn开始,令汇点vn的最晚发生时间vln=ven,按逆拓扑序列求其余各顶点k(k=n-1,n-2,2,1,0)的最晚发生时间vlk;(3)计算每个活动的最早开始时间ek (k=1,2,3,e);(4)计算每个活动的最晚开始时间lk (k=1,2,3,e);(5)找出所有ek= lk的活动k,这些活动即为AOE网的关键活动。,所以,关键活动有a2,a4,a6,a9,a10,a13,a14。从源点v0到汇点v9的只经过关键活动的路径就是关键路径。所以,关键路径为(v0,v2,v3,v4,v6,v9) 和(v0,v2,v3,v4,v7,v9)。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报