图之有向无环图,拓扑排序,关键路径

一.实际问题

图之有向无环图,拓扑排序,关键路径_第1张图片
上图可看出有向无环图(DAG)与一般图区别:有方向,共用子结构,无环。
有向无环图常用于解决工程活动问题:
  判断工程是否能否顺利进行–拓扑排序
  求工程完成所必须的最短时间–关键路径

二.拓扑排序

  拓扑排序主要为后续求最短路径做准备,同时判断图是否有环。
  从偏序得到拓扑有序的操作称为拓扑排序。
  图之有向无环图,拓扑排序,关键路径_第2张图片
  在偏序中,有些成员无法比较,而全序中所有成员都可比较。如上图偏序中V2和V3无法比较大小。
拓扑排序方法:
图之有向无环图,拓扑排序,关键路径_第3张图片
图之有向无环图,拓扑排序,关键路径_第4张图片
观察算法,如果存在环的话,上述算法是无解的,因为对于一个环,始终有一个入度,算法因为顶点有一个入度,无法取出这个顶点。
图之有向无环图,拓扑排序,关键路径_第5张图片

三.关键路径

  关键路径:从开始点到完成点的最长路径长度叫做关键路径
  主要是为了求出整个工程需要的最短时间,因为我们需要在这个周期内所有的活动都能够完成,所以我们需要知道一条最长路径,时间足够完成所有活动,同时又不会浪费时间。
  图之有向无环图,拓扑排序,关键路径_第6张图片
  假设从V1到V5,我们可以看到有两条路径,V1-V2-V5(6+1=7)和V1-V3-V5(4+1=5),只有选择V1-V2-V5为关键路径,V3这个活动才能在此期间同时完成。
  算法基于首先求出拓扑排序:
  

活动是边,事件是顶点

  e(i)表示活动最早开始时间:上面红色方框中,关键路径为V1-V2-V5,V3只需要在关键路径时间内完成就不会耽误后续活动进展。因此V3的e(i)为4
  L(i)表示活动最晚开始时间:计算最晚时间时需要从后往前算,当我们求出关键路径为V1-V2-V5总时间为7,而活动a6完成只需要1。7-1=6。因此V3的L(i)为6。
  当e(i)=L(i)就说明这个活动在前一个活动结束后必须立即开始,才能使整个过程时间最短。也就是关键活动。
转化为公式就是:  
图之有向无环图,拓扑排序,关键路径_第7张图片
  0,1,2…..i事件的Ve(i)已经解出,在求解Ve(j),只需选择从i到j总时间最长路径。此处思想认为贪心算法,每次选择当前最优解。如求解V5:已求解出V1-V2(6)和V1-V3(4)最优解,在求解V5时,选择(6+1=7)和(4+1=5)中较大者,这样能够保证在此V3能够完成。
  求解事件的VL(j)时从后往前推:注意其初始值为最后一个顶点,最后一个顶点的活动最晚开始时间就是其活动最早开始时间。比如考虑顶点V5,V7,V8,此时事件V7和V8的VL(j)已经求解出,求解V5只需要用事件V7和V8的VL(j)减去活动a7和a8活动持续事件,可得事件V5最晚发生事件。

注意任何一项活动的持续时间的改变都有可能影响关键路径。只有在不改变网的关键路径情况下,提高关键活动的速度才能缩短工期。如果关键路径改变了,那就得重新考虑。

你可能感兴趣的:(algorithm)