您的位置:首页 > 其它

图(拓扑排序和关键路径)

2013-07-24 15:47 288 查看
一:何谓“拓扑排序”?

假设以有向图表示一个工程的施工图或程序的数据流图(AOV网),则图中不允许出现回路。

检查有向图中是否存在回路的方法之一,是对有向图进行拓扑排序。

对有向图进行如下操作:

按照有向图给出的次序关系,将图中顶点排成一个线性序列,对于有向图中没有限定次序关系的顶点,则可以人为加上任意的次序关系。由此所得顶点的线性序列称之为拓扑有序序列。

二:如何进行拓扑排序?

一、从有向图中选取一个没有前驱

        的顶点,并输出之;

二、从有向图中删去此顶点以及所

        有以它为尾的弧;

重复上述两步,直至图空,或者图不空但找不到无前驱的顶点为止。

拓扑排序算法



总是删除入度为0的顶点并输出之。
注意:拓扑排序的结果不一定是唯一的。
 

2.2 关键路径


 

问题:


假设以有向网表示一个施工流图,弧上的权值表示完成该项子工程所需时间。

问:哪些子工程项是关键工程

即:哪些子工程项将影响整个工程的完成期限的。


用边表示活动的网络(AOE网络)

l如果在无有向环的带权有向图

 用有向边表示一个工程中的各项活动(Activity)

 用边上的权值表示活动的持续时间(Duration)

 用顶点表示事件(Event)

   则这样的有向图叫做用边表示活动的网络,简AOE (Activity On Edges)网络。

 AOE网络在某些工程估算方面非常有用。例如,可以使人们了解:
    (1) 完成整个工程至少需要多少时间
    (2) 为缩短完成工程所需的时间, 应当加快哪些活动? 

AOE 网(活动在边上),边代表活动或任务,顶点代
表事件。
l在AOE网络中, 有些活动顺序进行,有些活
动并行进行
l事件i发生后,其后继活动a(i,*)都可以开始

只有所有先导活动a(*,j)都结束后,事件j才
发生。

整个工程完成的时间为:从有向图的源点汇点的最长路径。

例如:
 



关键活动指的是:该弧上的权值增加将使有向图上的最长路径的长度增加。

从源点到各个顶点,以至从源点到汇点的有向路径可能不止一条。这些路径的长度也可能不同。完成不同路径的活动所需的时间虽然不同,但只有各条路径上所有活动都完成了,整个工程才算完成。

因此,完成整个工程所需的时间取决于从源点到汇点的最长路径长度,即在这条路径上所有活动的持续时间之和。这条路径长度最长的路径就叫做关键路径(Critical
Path)

要找出关键路径,必须找出关键活动,即不按期完成就会影响整个工程完成的活动。关键路径上的所有活动都是关键活动。因此,只要找到了关键活动,就可以找到关键路径


三:关键路径具体算法如下:



 







算法的实现要点:

显然,求ve的顺序应该是按拓扑有序次序

 

而求vl的顺序应该是拓扑有序序列的逆序列即扑逆序次序


因此,应该在拓扑排序的过程中,另设一个记下拓扑有序序列。

      在拓扑排序求Ve[i]和逆拓扑有序求Vl[i],
需时间为 
O(n+e)
求各个活动的e[k]l[k]时所需时间为O(e),
共花费时间仍然是O(n+e)


 
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: