9.5.2 关键路径

图论的最后一部分是关键路径,我们简单了解一下。关键路径是在拓扑排序基础上进行的。

拓扑排序解决工程项目能否顺利进行,解决活动间的依赖问题;而关键路径解决工程完成的时间。这里提出一个AOE网络(Activity on Edge),即顶点代表事件,边代表活动,权重代表活动持续时间。

二者的关系就是:AOV网只能表示活动之间的制约关系,边表示活动之间的依赖,没有权重,而AOE网可以用权值表示活动的持续时间。所以AOE网是建立在活动之间制约关系没有矛盾的基础上,再来分析整个工程需要多少时间。

在AOE网中,从始点到终点具有最大路径长度(该路径上的各个活动所持续的时间之和)的路径为关键路径

关键路径(CriticalPath)算法的主要思想:

这里可以参考下面几篇博客详解关键路径算法,理解四个变量的含义和求解方法,再找出关键路径

图之查找关键路径(python)实现

教你轻松计算AOE网关键路径

前提是四个重要的概念、变量

(1)事件最早开始时间etv(earlist time of vertex):顶点k的最早发生时间
(2)事件最晚开始时间ltv(latest time of vertex) :顶点k的最晚发生时间,超过此时间,会延误整个工期
(3)活动最早开始时间ete(earlist time of edge):弧a的最早发生时间
(4)活动最晚开始时间let(latest time of edge) :弧a的最晚发生时间,就是不推迟工期的最晚开始时间

求解方法:

第一步先拓扑排序,再依次求解这四个变量。

结合上面的博客中一些图示理解,etv 按拓扑排序顺序遍历所有顶点,初始时间0,父顶点的时间+边的权重,取极大值;ltv 按拓扑排序逆序遍历,初始时间为终点的时间,向前减去边的权重;

最后我们遍历所有顶点及邻接边,求每条边(活动)的ete 和 let ,重点来了,取ete(i)=let(i)的边即为关键路径上的边(关键路径可能不止一条)。

详细的参考大神的博客即可,有兴趣的实现一下。LeetCode中关键路径题目没注意到,理解算法的核心思想点到为止也是不错的。

 

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值