关键路径
情景
【情景】:你、张三、王五、李四下午约在【叫一只鸡】炸鸡店打牌,相约下午14点开始出发
【情况】是这样子的:
1. 【你】有摩托车,去车站需要15分钟,从车站到店里需要10分钟
2. 【张三】在乡下,来县城到车站需要30分钟
3. 【王五】步行,去店里需要10分钟
4. 【李四】骑单车,去店里需要15分钟
【约定】你们做了一个安排:【张三】上来后,【你】去接【张三】来店里
我们用【有向图】表示这次【活动】:
活动发起时间14:00
张三到县城 | 你到车站等张三 | 张三、你到店里 | 王五到店里 | 李四到店里 | 开始打牌 | |
---|---|---|---|---|---|---|
ve最早发生时间 | 张三乘车到县城需要 30min |
你去车站需要 15min |
你在车站等到张三后,立刻去店里 从活动发起时间14:00需要 40min(30+10) |
王五步行到店里需要 10min |
李四骑单车去店里需要 15min |
活动发起14:00到最早开始打牌需要 40min,即14:40 等人到齐,就张三最慢,所以等张三来了,其他人准时到,就可以开始 |
vl最迟发生时间 | 张三从家里去县城最迟的出发时间 30-30=0,即14:00 |
你最迟出发去车站的时间 30-15=15min,即14:15 |
张三和你最迟从车站过来的时间为 40-10=30min,即14:30 |
王五最晚出发的时间是 40-10=30min,即14:30 |
李四最晚出发时间是 40-15=25min,即14:25 |
从ve的分析,我们可以知道,打牌的最早时间是14:40 即40min |
【补充】 vl表示,为了保证14:40能够开始打牌,各个人最迟的出发时间。求vl时,应该从右边往左边求
【关键活动】“张三到县城”,如果张三到县城的时间耽搁了,那开始打牌的时间就得推迟了
【关键路径】“张三到县城”->”你到车站等到张三”->”张三、你到达店里”->”开始打牌”
问题
用【有向网】表示一个【施工
流图】
1. 【弧上的权值】:表示完成该项目【子工程】所需时间
2. 整个工程【完成的时间】:从【有向图】的【源点】到【汇点】的最长路径
【问】 哪些子工程项是“关键工程”
【解释】 关键工程:这个工作如果推迟完成,它会导致整个工程完成推迟
【定性来谈】该弧上的权值增加,将使有向图上的【最长路径的长度】增加,这个【弧】称之为【关键活动】或【关键工程】
如何求关键活动
ve(j)
【含义】 事件(顶点)最早发生的时间
【解释】这个事件(这个工作,这个工程)最早什么时候能开始
【定性来谈】ve(j)=从源点到顶点j的最长路径长度
汇点(终点)的【最早发生时间】:即为整个工程能够【最早完成的时间】
【解释】中途不拖拉,一个工作完成,下一个工作立刻动手。整个工程保质保量的干下来(效率最高),最早能够完成的时间。我们记为plan_time,后面要用到
vl(k)
【含义】事件(顶点)的最迟发生时间vl(k)
【解释】上面谈到plan_time,与这个有关。假设,我们要在plan_time的时间内把整个工作做完,每个小工作最迟开始的时间称之为【最迟发生时间】。也就是说,【小工程】最迟什么时候开始,它不会影响总工程的按时的完成
【定性来谈】vl(k)=从顶点k到汇点(终点)的最短路径长度
算法
假设第i条弧为
ve(源点) = 0;
ve(k) = Max{ ve(j) + dut(<j,k>) }
vl(汇点) = ve(汇点)
vl(j) = Min{ vl(k)-dut(<j,k>) }
算法实现要点
显然,求ve的顺序应该是按【拓扑有序的次序】
而,求vl的顺序应该是按【拓扑逆序】的次序
因为,拓扑逆序序列即为【拓扑有序序列的逆序列】
因此,应该在拓扑排序的过程中,另设一个“栈”记下拓扑有序序列
例子
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ||
---|---|---|---|---|---|---|---|---|---|---|
事件最早发生时间 | ve | 0 | 6 | 4 | 5 | 7 | 7 | 15 | 14 | 18 |
事件最迟发生时间 | vl | 0 | 6 | 6 | 8 | 7 | 10 | 16 | 14 | 18 |
【说明】vl为最迟发生时间,保证18天完成,每项工作最迟第几天开始。求得时要从后面往前求
1-2 | 1-3 | 1-4 | 2-5 | 3-5 | 4-6 | 5-7 | 5-8 | 6-8 | 7-9 | 8-9 | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
最早开始加工时间 | ee | 0 | 0 | 0 | 6 | 4 | 5 | 7 | 7 | 7 | 15 | 14 |
保证14天内完成 最迟开始加工时间 |
el | 0 | 2 | 3 | 6 | 6 | 8 | 8 | 7 | 10 | 16 | 14 |
【说明】el这道工序最迟开始的时间
【关键活动】1->2、2->5、5->8、8->9
【说明】最早开始时间 与 最迟开始时间 相同的弧
【解释】活动不能够推迟的,两个时间相同
【关键路径】1->2->5->8->9
【解释】该路径就是图中的最长路径,如果最长路径上因为一些事情耽搁了,权重边长了,那么工期就会被延长