关键路径求解过程--王道数据结构

经常忘记关键路径各个量怎么求,开个帖子梳理一下王道求关键路径的流程,其中包含了一些个人的思考和见解,以便复习,不足之处欢迎指正

求关键路径

正向拓扑序列,就是从开头出发,每次都是去除入度为0的结点以及结点相连的边,如果有新结点因此而入度为0,重复上述过程
逆向拓扑序列,就是从结尾出发,每次都是去除出度为0的结点以及结点相连的边,如果有新结点因此而出度为0,重复上述过程

弧,也就是活动(完成活动需要耗费时间)
结点,也就是事件(事件属于一种状态,不需要耗费时间)

完整的流程见下图

1.求所有事件的最早发生时间

令第一个结点的最早开始时间为0

按照正向拓扑排序的序列顺序依次求出后续结点的最早开始事件

ve(k): max{ 前节点的ve +权值(从这个前节点到k节点的路径的权值)} (算出的所有前节点ve后加上路径权值后的值,取最大的)(具体的求解流程见上图)

最早开始时间,为什么是正向拓扑序列的结点的最早开始时间的值,加上圆弧的值,然后取最大的那个值?
        肯定要等最慢的那一个完成任务后,后面的人才可以开始做;前面的不同的结点完成得越来越慢,导致后面共同后继的这一个节点也就启动得越来越晚

2.求所有事件的最迟发生时间

令最后一个结点的 最晚开始时间 = 最早开始时间

按照逆向拓扑排序的序列顺序依次求出前面结点的最晚开始事件

vl(k): min{ 后节点的vl - 权值(从这个后节点到k节点的路径的权值)} (算出的所有后节点vl后减上路径权值后的值,取最小的)(具体的求解流程见上图)

最迟发生时间,为什么是逆向拓扑序列的结点的最晚开始时间的值,减去圆弧的值,然后取最小的那个值?
        后续的结点要保证按时启动,前面的结点肯定要在这个时间点,减去圆弧的时间后,一定要启动了,如果不启动,后续结点将无法按时启动;后续的不同的结点要求启动得越来越早,导致前面的共同前驱的这一个结点也就启动得越来越早

3.求所有活动的最早发生时间

弧(也就是活动)的最早发生时间,等于这个弧开头的结点的最早开始时间,即,(前一个结点开始的瞬间,弧就可以开始了)(具体的求解流程见上图)

4.求所有活动的最迟发生(最晚开始)时间

弧(也就是活动)的最晚开始时间,等于这个弧末尾的结点的最晚开始时间,减去这个弧的长度,即,(后一个结点要求最晚那个点开始开会,弧就需要留好在路上的时间,算好时间就要出发)(具体的求解流程见上图)

5.求所有活动的时间余量

关键路径指的是最为重要的活动,指的是需要花费最多时间的弧(最长时间的路径),如果弧最早开始时间和最晚开始时间卡得很极限(刚好相等,做差为0,如上图中圈红的结点),那这个弧就属于关键路径

总结:

正向拓扑序列,就是从开头出发,每次都是去除入度为0的结点以及结点相连的边,如果有新结点因此而入度为0,重复上述过程
逆向拓扑序列,就是从结尾出发,每次都是去除出度为0的结点以及结点相连的边,如果有新结点因此而出度为0,重复上述过程

弧,也就是活动
结点,也就是事件

1.求所有事件的最早发生时间

令第一个结点的最早开始时间为0

按照正向拓扑排序的序列顺序依次求出后续结点的最早开始事件

ve(k): max{ 前节点的ve +权值(从这个前节点到k节点的路径的权值)} (算出的所有前节点ve后加上路径权值后的值,取最大的)

最早开始时间,为什么是正向拓扑序列的结点的最早开始时间的值,加上圆弧的值,然后取最大的那个值?
        肯定要等最慢的那一个完成任务后,后面的人才可以开始做;前面的不同的结点完成得越来越慢,导致后面共同后继的这一个节点也就启动得越来越晚

2.求所有事件的最迟发生时间

令最后一个结点的 最晚开始时间 = 最早开始时间

按照逆向拓扑排序的序列顺序依次求出前面结点的最晚开始事件

vl(k): min{ 后节点的vl - 权值(从这个后节点到k节点的路径的权值)} (算出的所有后节点vl后减上路径权值后的值,取最小的)

最迟发生时间,为什么是逆向拓扑序列的结点的最晚开始时间的值,减去圆弧的值,然后取最小的那个值?
        后续的结点要保证按时启动,前面的结点肯定要在这个时间点,减去圆弧的时间后,一定要启动了,如果不启动,后续结点将无法按时启动;后续的不同的结点要求启动得越来越早,导致前面的共同前驱的这一个结点也就启动得越来越早

3.弧的最早开始时间,等于这个弧开头的结点的最早开始时间,即,(前一个结点开始的瞬间,弧就可以开始了)

4.弧的最晚开始时间,等于这个弧末尾的结点的最晚开始时间,减去这个弧的长度,即,等于(后一个结点要求最晚那个点开始开会,弧就需要留好在路上的时间,算好时间就要出发)

5.关键路径指的是最为重要的活动,指的是需要花费最多时间的弧(最长时间的路径),如果弧最早开始时间和最晚开始时间卡得很极限(刚好相等,做差为0,如上图中圈红的结点),那这个弧就属于关键路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值