相关概念
AOE网
AOE网(Activity On Edge Network)用边表示活动,用顶点表示事件(活动的完成)。边是带权的,表示活动需要的时间。
源点与汇点
源点:入度为0的点,表示一个工程的开始。
汇点:出度为0的点,表示一个工程的结束。
关键活动与关键路径
在AOE网中,从源点到汇点最长的路径称为关键路径,在关键路径上的活动称为关键活动。
因为AOE网中的活动是可以并行进行的,所以整个工程的时间开销,其实是最长路径的时间开销。即关键路径制约整个工程的工期。
>_< 看个图理解一下上面的定义吧!!!
加深理解
通过AOV网与AOE网的比较,我们更能够深刻的理解二者。
相同点
都是有向无环图(DAG);都存在拓扑限制。
不同点
AOV网的顶点表示活动,边无权。AOV网用来分析活动之间的制约关系。
AOE网的顶点表示事件(活动的完成),边表示活动,权值为活动的持续时间。AOE网用来分析工程的最小时间限制,也就是说,缩短哪些活动持续时间可以缩短整个工程的工期(关键活动),缩短哪些活动持续时间并没有意义(非关键活动)。
关键路径算法(理论)
在说关键路径算法之前,你需要弄懂下面的几个重要参量及其求法:
事件 vk 的最早发生时间 ve(k) —— 它是从源点v1到某个顶点vk的最长路径长度。它决定了之后的活动能够开工的最早时间。
ve(源点) = 0
ve(k) = max{ve(j) + cost(j, k)}
事件 vk 的最迟发生时间 vl(k) —— 它是指在不推迟整个工期的前提下,该事件最迟必须发生的事件。
vl(汇点) = ve(汇点)
vl(k) = min{vl(j) - cost(k, j)}
活动 ai 的最早开始时间 e(i) —— 它是该活动的起点表示的事件的最早发生时间。
活动为(k, j),则 e(i) = ve(k)
活动 ai 的最迟开始时间 l(i) —— 它是该活动的终点表示的事件的最迟发生事件该活动所需时间之差。
活动为(k, j),则 l(i) = vl(j) - cost(k, j)
好了,下面正式介绍关键路径算法。
1)从源点出发,令 ve(源点) = 0,按拓扑顺序求出所有顶点(事件)的最早发生时间 ve()
2)从汇点出发,令 vl(汇点) = ve(汇点),按拓扑逆序求出所有顶点(事件)的最迟发生时间 vl()
3)根据各顶点的 ve() 值求出所有边(活动)的最早开始时间 e()
4)根据各顶点的 vl() 值求出所有边(活动)的最迟开始时间 l()
5)e() = l() 的边构成关键路径;关键路径上的顶点为关键活动。
关键路径算法(举例)
题目如图:
具体流程:
ve(1) = 0
ve(2) = ve(1) + 3 = 3
ve(3) = ve(1) + 2 = 2
ve(4) = max{ve(2) + 2, ve(3) + 4} = max{5, 6} = 6
ve(5) = ve(2) + 3 = 6
ve(6) = max{ve(5) + 1, ve(4) + 2, ve(3) + 3} = max{7, 8, 5} = 8
vl(6) = ve(6) = 8
vl(5) = vl(6) - 1 = 7
vl(4) = vl(6) - 2 = 6
vl(3) = min{vl(4) - 4, vl(6) - 3} = min{2, 5} = 2
vl(2) = min{vl(5) - 3, vl(4) - 2} = min{4, 4} = 4
vl(1) = min{vl(2) - 3, vl(3) - 2} = min{1, 1, } = 1
e(1) = ve(1) = 0
e(2) = ve(1) = 0
e(3) = ve(2) = 3
e(4) = ve(3) = 3
e(5) = ve(3) = 2
e(6) = ve(3) = 2
e(7) = ve(4) = 6
e(8) = ve(5) = 6
l(1) = vl(2) - 3 = 1
l(2) = vl(3) - 2 = 0
l(3) = vl(4) - 2 = 4
l(4) = vl(5) - 3 = 4
l(5) = vl(4) - 4 = 2
l(6) = vl(6) - 3 = 5
l(7) = vl(6) - 2 = 6
l(8) = vl(6) - 1 = 7
e(2) == l(2)
e(5) == l(5)
e(7) == l(7)
最终结果:
补充说明
① 关键路径上的活动是关键活动,它是决定整个工程工期的关键因素,即通过加快关键活动来缩短整个工程的工期。但是注意关键活动的缩短存在一个下限,因为一旦缩短到一定的程度,这条路径就不再是关键路径,该关键活动就会变成非关键活动。
② AOE网的关键路径并不唯一,即关键路径可能有多条。且对于有几条关键路径的网,只提高一条关键路径上的关键活动并不能缩短整个工程的工期,只有加快那些包括在所有关键路径上的关键活动才能达到缩短工期的目的。
☘️