用拓扑排序求关键路径

拓扑排序

  1. 什么是拓扑排序:
    设G=(V, E)是一个具有n个顶点的有向图,V中顶点序列v1,v2, … vn,称为一个拓扑序列,当且仅当该顶点序列满足下列条件:
    若<i, j>是图中的边(或从顶点i到j有一条路径) :
    拓扑排序与关键路径
    则在拓扑序列中顶点i必须排在顶点j之前。
    在一个有向图中找-一个拓扑序列的过程称为拓扑排序。

  2. 拓扑排序步骤
    (1)从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它。
    (2)从图中删去该顶点,并且删去从该顶点发出的全部有向边。
    (3)重复上述两步,直到剩余的图中不再存在没有前驱的顶点为止。

算法演示:

拓扑排序与关键路径
拓扑排序与关键路径
拓扑排序与关键路径
拓扑排序与关键路径
。。。。。。。。
拓扑排序与关键路径
我们来回顾下它的运行过程:
首先,找到一个没有入度的顶点C1,输出,去除C1的有向边;在剩下的图中找到没有入度的顶点C3,去除C3的有向边。依次操作下去,直到所有顶点均被输出,最后得到一个序列:C1,C3,C2,C7,C4,C6,C5

关键路径

  1. 什么是AOE网
    ◎用一个带权有向图 (DAG)描述工程的预计进度。
    ◎顶点表示事件,有向边表示活动,边e的权c(e)表示完成活动e所需的时间(比如天数)。
    ◎图中入度为0的顶点表示工程的开始事件(如开工仪式),出度为0的顶点表示工程结束事件。

  2. 关键路径
    从AOE网中源点到汇点的最长路径,具有最大长度的路径叫关键路径。
    关键路径是由关键活动构成的,关键路径可能不唯一。
    拓扑排序与关键路径

  3. 求关键路径的过程
    (1)事件的最早开始和最迟开始时间
    事件v的最早开始时间:规定源点事件的最早开始时间为0。定义图中任一事件v的最早开始时间(early event) ee(v)等 于x、y、z到v所有路径长度的最大值:
    拓扑排序与关键路径
    (2)活动的最早开始时间和最迟开始时间
    拓扑排序与关键路径
    活动a的最早开始时间e(a)指该活动起点x事件的最早开始时间,即:
    e(a)=ee(x)
    活动a的最迟开始时间l(a)指该活动终点y事件的最迟开始时间与该活动所需时间之差,即:
    l(a)=le(y)-c (a)
    活动a的最迟开始时间l(a)与最早开始时间e(a)的差d(a),即d(a)=l(a)-e(a),当d(a)为0时,则该活动为关键活动。
    算法演示:
    拓扑排序与关键路径拓扑排序与关键路径
    拓扑排序与关键路径拓扑排序与关键路径拓扑排序与关键路径
    拓扑排序与关键路径
    我们来分析下上面的演示过程:
    首先,先求最早开始时间e(a),即最长的路径长度,按拓扑排序ABCDEFGHI,依次求出各顶点的ee(a)值,e(a)值为该路径的前一个顶点ee(x)值。
    最迟开始时间l(a),按IHGFEDCBA的拓扑排序,此时的le(I)应用求最早开始时间ee(I)的值开始,由于求最迟开始时间l(a),求得的le(y)即最短的路径长度,l(a)的值为该路径的后一个顶点le(y)-c(a)的值。
    由此可知,关键活动有a11、a10、 a8、a7、a4、 a1,因此关键路径有两条: A-B-E-F-I和A-B-E-G-I。

    从关键路径可以看出:
    1.缩短某一活动,整个活动不一定会缩短。
    2.缩短某一关键活动时,整个活动也不一定会缩短。只有缩短所有关键路径共享的关键活动的时间,才可能整个工期缩短。

相关文章: