关键路径
一.基础知识
1.AOE网(Activity On Edge NetWork)有向边表示活动的网络
(1)有向+带权
(2)仅有一个入度为0的顶点,称为开始顶点(源点),他表示整个工程的开始
(3)仅有一个出度为0的顶点,称为结束顶点(汇点),他表示整个工程的结束
其他性质:
(1)a2结束后V2才能发生
(2)V2发生后,a3才能开始
(3)a1和a2可以同时进行,但a2和a3不能同时进行
2.关键路径
early、late、vertex
(1)事件:顶点vk
(2)活动:有向边ai
(3)开销:边上的权值
(4)ve():所有事件的最早发生时间
(5)vl():所有事件的最迟发生时间
(6)e():所有活动的最早发生时间
(7)l():所有活动的最迟发生时间
(8)d():所有活动的时间余量
d(i)=l(i)-e(i)
V1→V3→V4路径长度为4
V1→V2→V3→V4路径长度为6
我们将所有路径中的最大路径称为关键路径,关键路径上的活动称为关键活动
只有无环图(没有回路)才有关键路径
可以看到
(1)关键路径决定着工程完成的时间,如果关键活动不能按时完成,则工程时间会延长
(2)缩短关键活动的时间,可以缩短整个工程的时间。但当缩短关键活动到一定程度时,关键路径可能变为非关键路径(路径长度不再是最大),此时若继续缩短,总工程时间不再继续减小
(3)V1→V2→V3需要4分钟,而V1→V3需要2分钟,即a1拖后2分钟完成(时间余量d(1)=2)仍不影响工程完成时间,但关键活动不能延迟。即对于关键活动,时间余量d(i)一定为0(充要条件)
(4)可能存在多条关键路径(总路径长度一样),此时如果只提高一条关键路径上的关键活动并不能缩短总工程时间。只要加快关键路径上公共的关键活动才能缩短总工程时间
如:缩短a2
求关键路径的步骤:
ve()→vl()→e()→l()→d()
二.求所有事件的最早发生时间ve()
拓扑序列:V1、V3、V2、V5、V4、V6
按此序列依次遍历
ve(1)=0(一上来就能开始)
ve(3)=2(a2=2以后才能开始)
ve(2)=3
ve(5)=6
ve(4)=max{5,6}=6
解释:5完成时6没有完成。关键路径思想,必须都完成,选最大
ve(6)=max{ve(5)+a8,ve(4)+a7,ve(3)+a6}=max{7,8,5}=8
结果
得到结论:
借助拓扑排序
ve(源点)=0
ve(k)=Max{ve(j)+Weight(vj,vk)},vj是vk的任意前驱
三.求所有事件的最迟发生时间vl()
逆拓扑序列:V6、V5、V4、V2、V3、V1
按此序列依次遍历
vl(6)=8(与ve(6)相等)
vl(5)=7
vl(4)=6
vl(2)=min{vl(5)-a4,vl(4)-a3}=min{4,4}=4
vl(3)=min{vl(4)-a5,vl(6)-a6}={2,5}=2
解释:V3至少在第2分钟发生、至少在第5分钟发生,为保证都不耽误,选最小的2
vl(1)=min{vl(2)-a1,vl(3)-a2}=min{1,0}=0
此时结果
得到结论:
借助逆拓扑排序
vl(汇点)=ve(汇点)
vl(k)=Min{vl(j)-Weight(vk,vj)},vj为vk的任意后继
四.求所有活动的最早发生时间 e()
图中标注为ve()
e(1)=0、e(2)=0
e(3)=3、e(4)=3
e(5)=2、e(6)=2
e(7)=6、e(8)=6
得到结论:
借助ve()数组
对于边<vk,vj>表示活动ai,e(i)=ve(k)
五.求所有活动的最迟发生时间 l()
图中标注为vl()
l(8)=7(vl(6)-a8=8-1=7)
l(7)=8-2=6
l(6)=8-3=5
l(5)=6-4=2
l(4)=7-3=4
l(3)=6-2=4
l(2)=2-2=0
l(1)=4-3=1
结果
得到结论:
借助vl()数组
对于边<vk,vj>表示活动ai,l(i)=vl(j)-Weight(vk,vj)
六.求所有活动的时间余量
d(i)=l(i)-e(i)
d(k)=0的活动就是关键活动
由表格得到d(2)、d(5)、d(7)=0
a2、a5、a7是关键活动
V1、V3、V4、V6是关键路径