关键路径核心算法

关键路径核心算法:求一条不影响整体工程进度的最优路径方案,下面我将分为三个步骤详细讲解该算法。

第一步:求各个事件(结点)的最早时间(在这里我们用一个数组va[]来存储各个事件的最早时间)和最晚时间(在这里我们用一个数组vb[]来存储各个事件的最迟时间),该工程图如下所示。

关键路径核心算法_第1张图片

首先进行拓扑排序(0,1,2,3)求最早时间,得到:

va[0]=0;

va[1]=3;

va[2]=max{va[0]+a2,va[1]+a3}=7;

va[3]=max{va[0]+a0,va[1]+a4,va[2]+a5}=12;

然后逆拓扑排列(3,2,1,0)求最迟时间,得到

vb[3]=12;

vb[2]=7;

vb[1]=min{vb[2]-a3,vb[3]-a4}=3;

vb[0]=min{vb[3]-a0,vb[2]-a2,vb[1]-a1}=0;

接下来求该图“边”的最早时间用w(ai)表示,“边”的最迟时间用l(ai)表示;(注意,上面的是结点对应的的最早时间和最短时间,不要混淆)

最早事件时间,过程如下

w(a1)=w(a2)=w(a0)=va[0]=0;

w(a3)=w(a4)=va[1]=3;

w(a5)=va[2]=7;

最迟发生时间,过程如下

l(a0)=vb[3]-a0=7;

l(a1)=vb[1]-a1=0;

l(a2)=vb[2]-a2=5;

l(a3)=vb[2]-a3=3;

l(a4)=vb[3]-a4=11;

l(a5)=vb[3]-a5=7;

最后一步,建一个图表,将边的最早发生时间和边的最晚发生时间对比,如果一样,则这条边就是关键路径上的一条子路径。

最早发生时间 最迟发生时间 相同点
a0 0 7 ×
a1 0 0
a2 0 5 ×
a3 3 3
a4 3 11 ×
a5 7 7

将相同的提取出来得到关键路径(a1,a3,a5);

即a1->a3->a5就是这个图的关键路径。

你可能感兴趣的:(计算机,数据结构,算法)