【数据结构】选择题快速求解AOE网的关键路径

引言

求解AOE网关键路径时,书上的方法为先从源点到汇点求解事件最早发生时间ve,再从汇点到源点求解事件最迟发生时间vl,再利用ve和vl求解每个活动的最早开始时间e(i)和最迟开始时间l(i),e(i)和l(i)相等的活动则为关键活动,关键活动组成的从源点到汇点的路径即为关键路径。

王道书关于求解快速路径只是简单提了一嘴 如果这是一道选择题,根据上述求ve()的过程就已经能知道关键路径 ,并没有告诉你如何快速地求解关键路径,本文就此补充说明一下。

求法

这里直接举例给出求法

如下AOE图

在这里插入图片描述
我们从V1开始(按照拓扑序列)依次求解事件的最早发生时间ve,前三个顶点答案很显然,求得如下

v1v2v3v4v5
“事件的最早发生时间” ve()032--

在求解 V 4 V4 V4 的时候,需要对两条路径进行比较,即 V e ( 4 ) = m a x { V e ( 2 ) + a 3 , V e ( 3 ) + a 5 } = m a x { 5 , 6 } = 6 Ve(4)=max\{Ve(2)+a3,Ve(3)+a5\}=max\{5,6\}=6 Ve(4)=max{Ve(2)+a3,Ve(3)+a5}=max{5,6}=6显然选取的是 a 5 a5 a5 这条路径。

这意味着 a 3 a3 a3 这条路径对 V 4 V4 V4 来讲是 “冗余的” ,或者说因为 a 5 a5 a5 的存在,它有可以改变的空间。也就是 a 3 a3 a3 一定不是关键路径。我们可以叉掉它。
在这里插入图片描述
同样的 (不难看出Ve(5)=3+3=6)
V e ( 6 ) = m a x { V e ( 5 ) + a 8 , V e ( 4 ) + a 7 , V e ( 2 ) + a 6 } = m a x { 7 , 8 , 5 } = 8 Ve(6)=max\{Ve(5)+a8,Ve(4)+a7,Ve(2)+a6\}=max\{7,8,5\}=8 Ve(6)=max{Ve(5)+a8,Ve(4)+a7,Ve(2)+a6}=max{7,8,5}=8
叉掉不是关键路径的 a 8 a8 a8 a 6 a6 a6

按照以上思路,我们完成ve()的求解,并叉掉那些比较时被比下去的路径。
最后得到:
在这里插入图片描述
直观一点,我们把这些路径都去掉:
在这里插入图片描述
于是,我们得到关键路径
V 1 ⇒ V 2 ⇒ V 4 ⇒ V 6 V1\Rightarrow V2\Rightarrow V4\Rightarrow V6 V1V2V4V6
上图中,V1是源点,V6是汇点,完成工程意味着 V1到V6的一条路径,而去掉“不关键”的路径(活动边)后还可以走通的路径就是关键路径。
即上图中的(V1,V3,V4,V6)或者说(a2,a5,a7)
(注:a1和a4虽然保留在图中,但并不是关键活动,因为他们不在关键路径上)

总结

我们在求解Ve()的时候,遇到某个顶点有多个入度,需要用max比较获得最大的事件最早发生时间时,被比下去的路径可以被叉掉,选取数值最大的路径,并保留它,最终获得的就是关键路径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值