图的关键路径

本文介绍了AOE(Activity On Edge)网的概念,用于表示工程的开始和结束。关键路径是决定工程完成时间的最长路径,其长度等于关键活动的持续时间总和。文章详细阐述了关键路径思想,包括最早发生时间、最迟发生时间的计算方法,以及如何通过拓扑排序求解关键路径。还提供了关键路径算法的实现步骤,包括计算每个事件的最早和最晚发生时间,以及识别关键活动的过程。
摘要由CSDN通过智能技术生成

AOE网

AOE网是指在有向网中,如果用顶点表示事件,用有向边表示活动,边上的权值表示活动持续的时间,则称这样的有向网为弧表示活动的网(Acticity On Edge,AOE-网)。对仅有一个开始点和一个完成点的工程,可用AOE-网来表示,它可用来估算工程的完成时间。
在这里插入图片描述

  1. 网中仅有一个入度为0的顶点称为源点,表示工程的开始;仅有一个出度为0的顶点称为汇点,表示工程的结束。
  2. 只有在进入某一顶点的各有向边所代表的活动均已完成,该顶点所代表的事件才能发生;只有在某顶点所代表的事件发生后,从该顶点发出的所有有向边所代表的活动才能开始。
  3. 整个工程完成的时间为:从有向图的源点到汇点的最长路径,即关键路径
  4. 关键活动持续时间的总和(关键路径的长度)就是完成整个工程的最短工期

关键路径思想

最早发生时间(对于顶点)

概念:ve(j):v是顶点,即事件,e是early,即最早,j是顶点vj;

ve(j)是指事件(顶点)的最早发生时间
ve(j) = 从源点到顶点j的最长路径长度
ve(源点)=0;
ve(j)=Max{ve(k)+dut(<k,j>)},dut<k,j>表示活动持续的时间;
在这里插入图片描述
ve(j)的值可从源点开始按拓扑顺序向汇点递推。

最迟发生时间(对于顶点)

vl(k):v是顶点,即事件,l是late,即最迟,k是顶点vk
vl(k)是事件(顶点)的最迟发生时间
vl(k) = 从顶点k到汇点的最短路径长度
vl(汇点) = ve(汇点);
vl(k) = Min{vl(j) - dut<k,j>}
在这里插入图片描述
vl(j)的值可从汇点开始按逆拓扑顺序向源点递推。

最早开始时间和最晚开始时间(对于边)

  • 活动的最早开始时间
    ee(i) = ve(j)
    即:假设第i条弧为<j,k>,则ee(i)为第i项活动(弧)的最早开始时间;
  • 活动的最晚开始时间
    el(i) = vl(k)-dut(<j,k>)
    即:el(i)为第i项活动(弧)的最迟开始时间

在这里插入图片描述
ee(a1)=ee(V1-V2)=ve(V1)=0
el(a1)=el(V1-V2)=vI(V2)-2=0
ee(a6)=ee(V2-V6)=ve(V2)=2
el(a6)=el(V2-V6)=vI(V6)-8=6
……

如果这个活动的最早开始时间和最晚开始时间是相同的,那就说明活动不允许延迟。如果二者有差额,说明是有余量的,不影响整个工期。
关键活动是ee(aj)=el(aj)的活动

首先,求得每个事件的最早发生时间ve,再从汇点到源点求得最晚发生时间。求得每个活动的最早和最晚发生时间。然后找活动最早和最晚发生时间相同的,这就是整个工期里面不可以延期的关键活动。
在这里插入图片描述

关键路径算法实现

关键路径的求解步骤

  1. 按拓扑顺序求出每个事件的最早发生时间;
  2. 按逆拓扑序列求出每个事件的最迟发生时间;
  3. 计算每个活动的最早开始时间和最晚发生时间;
  4. 找出关键活动,即ee(ai)=el(ai)的活动。

改造拓扑排序算法

  • 求出各顶点的入度,并将入度为0的顶点入队;
  • 将各顶点的最早发生时间ve(i)初始化为0;
  • 只要队列不空,重复以下步骤:
    (1)将队头顶点j出队,同时压入栈T(逆拓扑)
    (2)将队头j的每一个邻接点k的入度减1,如果顶点k的入度减为0,则将顶点k入队;
    (3)根据顶点j的最早发生时间ve(j)和弧<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值