5.关键路径(AOE网)
拓扑排序主要是为解决一个工程能否顺序进行的问题,但有时我们还需要解决工程完成需要的最短时间问题。
5.1 定义
AOE网(Activity On Edge NetWork):在带权有向图中,以顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销(如完成活动所需的时间),称之为用边表示活动的网络,简称AOE网(Activity On Edge NetWork)。
- 顶点:事件
- 有向边:活动
- 权值:完成活动的开销(如时间)
AOE网和AOV网都是有向无环图,不同之处在于它们的边和顶点所代表的含义是不同的,AOE网中的边有权值;而AOV网中的边无权值,仅表示顶点之间的前后关系。
AOE网具有以下两个性质:
- 只有在某顶点所代表的事件发生后,从该顶点出发的各有向边所代表的活动才能开始。
- 只有在进入某顶点的各有向边所代表的活动都已结束时,该顶点所代表的事件才能发生。(有些活动可以并行进行,例如这里打鸡蛋和洗蕃茄可以同时进行)
源点:在AOE网中仅有一个入度为0的顶点,称为开始顶点(源点),它表示整个工程的开始。(这里是V1)
汇点:也仅有一个出度为0的顶点,称为结束顶点(汇点),它表示整个工程的结束。(这里的V4)
从源点到汇点的有向路径可能有多条,所有路径中,具有最大路径长度的路径称为关键路径,而把关键路径上的活动称为关键活动。
(这里关键路径是V1->V2->V3->V4,它的长度最长)
【特性 - 注意】
-
完成整个工程的最短时间就是关键路径的长度,关键路径上的所有活动都是关键活动,它是决定整个工程的关键因素:
- 若关键活动不能按时完成,则整个工程的完成时间就会延长。
- 因此可通过加快关键活动,来缩短关键路径,缩短整个工程的工期。
- 当关键路径缩短到一定的程度,该关键活动就可能会变成非关键活动。
-
当网中的关键路径并不唯一,对于有几条关键路径的网,只提高一条关键路径上的关键活动速度并不能缩短整个工程的工期,只有加快那些包括在所有关键路径上的关键活动才能达到缩短工期的目的。
5.2 算法
-
事件的最早发生时间
ve
:即顶点V的最早发生时期。 -
事件的最晚发生时间
vl
:即顶点V的最晚发生时间,也就是每个顶点对应的事件最晚需要开始的时间,超出此时间将会延误整个工期。 -
活动的最早开始时间
e
:即弧a的最早发生时间。 -
活动的最晚开始时间
l
:即弧a的最晚发生时间,也就是不推迟工期的最晚开工时间。 -
一个活动a的最迟开始时间
l(i)
和其最早开始时间e(i)
的差额d(i) = l(i) - e(i)
:它是指该活动完成的时间余量,即在不增加完成整个工程所需总时间的情况下,活动a可以拖延的时间。若一个活动的时间余量为零(不允许拖延),则说明该活动必须要如期完成,否则就会拖延整个工程的进度,所以称
l(i)-e(i)=0
即l(i)= e(i)
的活动a是关键活动。
求关键路径的算法步骤如下:
- 从源点出发,令ve(源点)=0,按拓扑排序求其余顶点的最早发生时间ve()。
- 从汇点出发,令vl(汇点)= ve(汇点),按逆拓扑排序求其余顶点的最迟发生时间vl()。
- 根据各顶点的ve()值求所有弧的最早开始时间e()。
- 根据各顶点的vl()值求所有弧的最迟开始时间l()。
- 求AOE网中所有活动的差额d(),找出所有d()=0的活动构成关键路径。
❗比如题目是这里上面这个图,求关键路径:
V1 V2 V3 V4 V5 V6 正向推算事件(结点)最早发生的时间ve(如果有两个前驱得到两个值,选大的,因为早完成的需要等晚完成的) 正向0 3 2 6 6 8 反向推算事件(结点)最晚发生的时间vl(如果有两个后继得到两个值,选小的,因为小的表示早完成的那个,需要早完成后继才能正常进行)(先填V6=8) 反向0 4 2 6 7 8 vd = vl - ve 0 1 0 0 1 0 把vd=0的事件结点都带上:
所以关键路径是:V1->V3->V4->V6