从源点到汇点路径长度最长的路径为该工程的关键路径,即关键路径可以保证所有路径的活动都能够完成。
ok,再次进入我们的作业题:
如下图所示的AOE网(弧上权值代表活动的持续天数)
1)完成此工程最少所需要多少天?
2)哪些是关键活动,在图中表示出关键路径
我们先计算最早发生时间ve和最迟发生时间vl:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
Ve | 0 | 5 | 6 | 12 | 15 | 16 | 16 | 19 | 21 | 23 |
Vl | 0 | 9 | 6 | 12 | 15 | 21 | 16 | 19 | 21 | 23 |
对于事件i来说,ve(i) = Max{ve(m) + dut(<m, i>)},vl(i) = Min{vl(j) – dut(<i, j>)};其中ve(m)代表i前一个事件的最早发生时间,dut(<m, i>)表示从m到i的持续时间,大家可以把它看成一个递归算法,一直调用ve(),直到ve(源点)为止,然后取其最大值,因为它要保证所有路径上的活动都能完成;而最迟发生时间和前者一样,一直递归调用vl(),直到vl(汇点)为止,然后取其最小值即可。
回到原题中对照例图可以很快地得到表格所示内容。
我们再来看两个概念:e(i)和l(i),前者为活动ai 的最早可能开始时间,后者为活动ai的最迟允许开始时间。区别于前边的ve和vl,e和l为标识的是某活动的时间,而前者是某事件的时间。
假如从事件m到事件i的活动为af,则有e(f)=ve(m), l(f)=vl(i)–dut(<m,i>) ,即活动af的最早可能开始时间为其弧尾事件最早可能发生时间;最迟允许开始时间为其弧尾事件最迟发生时间与两个事件的持续时间之差。是不是感觉有点别扭,但只要理解了这几个关键词也就很容易看懂了。于是乎 e(k) = l(k)的活动就是关键活动 ,请看图表:
a1 | a2 | a3 | a4 | a5 | a6 | a7 | a8 | a9 | a10 | a11 | a12 | a13 | |
权 | 5 | 6 | 3 | 6 | 3 | 3 | 4 | 1 | 4 | 5 | 2 | 4 | 2 |
e | 0 | 0 | 5 | 6 | 6 | 12 | 12 | 15 | 15 | 16 | 19 | 16 | 21 |
l | 4 | 0 | 9 | 6 | 12 | 12 | 17 | 15 | 15 | 16 | 19 | 21 | 21 |
原文地址:http://blog.csdn.net/beyond9305/article/details/32899335