关键路径核心算法 - Go语言中文社区

关键路径核心算法


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

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

这里写图片描述

首先进行拓扑排序(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;

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

最早发生时间最迟发生时间相同点
a007×
a100
a205×
a333
a4311×
a577

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

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

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42373888/article/details/81605563
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2023-01-03 21:22:19
  • 阅读 ( 410 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢