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

本文详细介绍了AOE网的概念及其在工程计划中的应用,通过定义和实例讲解了如何利用AOE网求解关键路径,进而确定影响工程进度的关键活动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>表示,其持续时间为:wj,kw_{j,k}wj,k,如下图,
      在这里插入图片描述
      则有:(1).活动ai的最早开始时间(e(i))=以活动ai为边的弧尾(事件vj)的最早发生时间,即,
      e(i)=ve(j)e(i)=ve(j)e(i)=ve(j)
                 (2).活动ai的最迟开始时间(l(i))=以活动ai为边的弧头(事件vk)的最迟发生时间-活动ai的持续时间(wj,kw_{j,k}wj,k),即,
      l(i)=vl(k)−wj,kl(i)=vl(k)-w_{j,k}l(i)=vl(k)wj,k

    • 如何求ve(j)和vl(j)?
      (1). 从ve(1)=0开始向前递推
      ve(j)=Maxi{ve(i)+wi,j},&lt;i,j&gt;∈T,2≤j≤nve(j) = \mathop {Max}\limits_i \{ ve(i) + {w_{i,j}}\} , &lt; i,j &gt; \in T,2 \le j \le nve(j)=iMax{ve(i)+wi,j},<i,j>T,2jn
      其中T是所有以j为头的弧的集合。
      在这里插入图片描述
      (2). 从vl(n)==ve(n)开始向后递推
      vl(i)=Minj{vl(j)−wi,j},&lt;i,j&gt;∈S,1≤i≤n−1vl(i) = \mathop {Min}\limits_j \{ vl(j) - {w_{i,j}}\} , &lt; i,j &gt; \in S,1 \le i \le n - 1vl(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)。
    ve(j)=Maxi{ve(i)+wi,j},&lt;i,j&gt;∈T,2≤j≤nvl(i)=Minj{vl(j)−wi,j},&lt;i,j&gt;∈S,1≤i≤n−1ve(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 - 1ve(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)=ve(j)l(i)=vl(k)−wj,ke(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,就会改变关键路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值