数据结构之图(十)——关键路径

AOE网

  • 定义: 把工程计划表示为边表示活动的网络,叫AOE网。用顶点表示事件,弧表示活动,弧的权表示活动持续时间
  • 例子:
    在这里插入图片描述
    事件:表示在它之前的活动已经完成,在它之后的活动可以开始。例如,菜单定制(活动A)表示为,
    在这里插入图片描述
    其中,
    结点v1:表示A之前的活动已经完成,
    :表示活动A,
    边的权值:表示活动A持续30分钟,
    结点v2:表示活动A完成之后的后续活动可以开始。

    上述问题的AOE网为,
    在这里插入图片描述
    那么压缩哪项活动的时间可以使总时间变短?——求解关键路径。


求解关键路径

  • 例子: 设一个工程有11项活动,9个事件。
                事件v1——表示整个工程的开始(源点:入度为0的顶点)
                事件v9——表示整个工程的结束(汇点:出度为0的顶点)
    在这里插入图片描述
    那么,对于上述的AOE网,我们关心两个问题:
    (1)完成整项工程至少需要多少时间?
    (2)哪些活动是影响工程进度的关键?

    解决上述问题的关键,就是找到关键路径

  • 关键路径:路径长度最长的路径。
    路径长度:路径上各活动持续时间之和。

  • 4个描述量:
    在这里插入图片描述

    • ve(vj)——表示事件vj的最早发生时间。
      例:ve(v1)=0,ve(v2)=30
    • vl(vj)——表示事件vj的最迟发生时间。
      例:vl(v4)=165
    • e(i)——表示活动ai的最早开始时间。
      例:e(a3)=30
    • l(i)——表示活动ai的最迟开始时间。
      例:l(a3)=120
    • l(i)-e(i)——表示完成活动ai的时间余量。
      例:l(3)-e(3)=90
  • 关键活动:关键路径上的活动,即l(i)==e(i)(即,l(i)-e(i)==0)的活动。

  • 如何找到关键路径?

    • 如何找到l(i)==e(i)的关键活动?
      设活动ai用弧 &lt; j , k &gt; &lt;j,k&gt; <j,k>表示,其持续时间为: w j , k w_{j,k} wj,k,如下图,
      在这里插入图片描述
      则有:(1).活动ai的最早开始时间(e(i))=以活动ai为边的弧尾(事件vj)的最早发生时间,即,
      e ( i ) = v e ( j ) e(i)=ve(j) e(i)=ve(j)
                 (2).活动ai的最迟开始时间(l(i))=以活动ai为边的弧头(事件vk)的最迟发生时间-活动ai的持续时间( w j , k w_{j,k} wj,k),即,
      l ( i ) = v l ( k ) − w j , k l(i)=vl(k)-w_{j,k} l(i)=vl(k)wj,k

    • 如何求ve(j)和vl(j)?
      (1). 从ve(1)=0开始向前递推
      v e ( j ) = M a x i { v e ( i ) + w i , j } , &lt; i , j &gt; ∈ T , 2 ≤ j ≤ n ve(j) = \mathop {Max}\limits_i \{ ve(i) + {w_{i,j}}\} , &lt; i,j &gt; \in T,2 \le j \le n ve(j)=iMax{ve(i)+wi,j},<i,j>T,2jn
      其中T是所有以j为头的弧的集合。
      在这里插入图片描述
      (2). 从vl(n)==ve(n)开始向后递推
      v l ( i ) = M i n j { v l ( j ) − w i , j } , &lt; i , j &gt; ∈ S , 1 ≤ i ≤ n − 1 vl(i) = \mathop {Min}\limits_j \{ vl(j) - {w_{i,j}}\} , &lt; i,j &gt; \in S,1 \le i \le n - 1 vl(i)=jMin{vl(j)wi,j},<i,j>S,1in1
      其中S所有以i为尾的弧的集合。
      在这里插入图片描述

  • 求关键路径的步骤:
    1.求ve(i)、vl(j)
    2.求e(i)、l(i)
    3.计算l(i)-e(i)

  • 例子说明:
    在这里插入图片描述
    1.求ve(i)、vl(j)。
    v e ( j ) = M a x i { v e ( i ) + w i , j } , &lt; i , j &gt; ∈ T , 2 ≤ j ≤ n v l ( i ) = M i n j { v l ( j ) − w i , j } , &lt; i , j &gt; ∈ S , 1 ≤ i ≤ n − 1 ve(j) = \mathop {Max}\limits_i \{ ve(i) + {w_{i,j}}\} , &lt; i,j &gt; \in T,2 \le j \le n\\vl(i) = \mathop {Min}\limits_j \{ vl(j) - {w_{i,j}}\} , &lt; i,j &gt; \in S,1 \le i \le n - 1 ve(j)=iMax{ve(i)+wi,j},<i,j>T,2jnvl(i)=jMin{vl(j)wi,j},<i,j>S,1in1
    在这里插入图片描述
    2.求e(i)、l(i),计算l(i)-e(i) 。
    e ( i ) = v e ( j ) l ( i ) = v l ( k ) − w j , k e(i)=ve(j)\\l(i)=vl(k)-w_{j,k} e(i)=ve(j)l(i)=vl(k)wj,k
    在这里插入图片描述
    3.关键路径如下,
    在这里插入图片描述

  • 几点关于关键路径的讨论:

    • 若网中有几条关键路径,则需加快同时在几条关键路径上的关键活动。如:a11、a10、a8、a7。
    • 如果一个活动处于所有的关键路径上,那么提高这个活动的速度,就能缩短整个工程的完成时间,如:a1、a4。
    • 处于所有的关键路径上的活动完成时间不能缩短太多,否则会使原来的关键路径变成不是关键路径。这时,必须重新寻找关键路径。如:a1由6变成3,就会改变关键路径。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值