拓扑排序
-
什么是拓扑排序:
设G=(V, E)是一个具有n个顶点的有向图,V中顶点序列v1,v2, … vn,称为一个拓扑序列,当且仅当该顶点序列满足下列条件:
若<i, j>是图中的边(或从顶点i到j有一条路径) :
则在拓扑序列中顶点i必须排在顶点j之前。
在一个有向图中找-一个拓扑序列的过程称为拓扑排序。 -
拓扑排序步骤
(1)从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它。
(2)从图中删去该顶点,并且删去从该顶点发出的全部有向边。
(3)重复上述两步,直到剩余的图中不再存在没有前驱的顶点为止。
算法演示:
。。。。。。。。
我们来回顾下它的运行过程:
首先,找到一个没有入度的顶点C1,输出,去除C1的有向边;在剩下的图中找到没有入度的顶点C3,去除C3的有向边。依次操作下去,直到所有顶点均被输出,最后得到一个序列:C1,C3,C2,C7,C4,C6,C5
关键路径
-
什么是AOE网
◎用一个带权有向图 (DAG)描述工程的预计进度。
◎顶点表示事件,有向边表示活动,边e的权c(e)表示完成活动e所需的时间(比如天数)。
◎图中入度为0的顶点表示工程的开始事件(如开工仪式),出度为0的顶点表示工程结束事件。 -
关键路径
从AOE网中源点到汇点的最长路径,具有最大长度的路径叫关键路径。
关键路径是由关键活动构成的,关键路径可能不唯一。
-
求关键路径的过程
(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.缩短某一关键活动时,整个活动也不一定会缩短。只有缩短所有关键路径共享的关键活动的时间,才可能整个工期缩短。