拓扑排序与关键路径

用拓扑排序求关键路径

拓扑排序

  1. 什么是拓扑排序:
    设G=(V, E)是一个具有n个顶点的有向图,V中顶点序列v1,v2, … vn,称为一个拓扑序列,当且仅当该顶点序列满足下列条件:
    若<i, j>是图中的边(或从顶点i到j有一条路径) :
    在这里插入图片描述
    则在拓扑序列中顶点i必须排在顶点j之前。
    在一个有向图中找-一个拓扑序列的过程称为拓扑排序。

  2. 拓扑排序步骤
    (1)从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它。
    (2)从图中删去该顶点,并且删去从该顶点发出的全部有向边。
    (3)重复上述两步,直到剩余的图中不再存在没有前驱的顶点为止。

算法演示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
。。。。。。。。
在这里插入图片描述
我们来回顾下它的运行过程:
首先,找到一个没有入度的顶点C1,输出,去除C1的有向边;在剩下的图中找到没有入度的顶点C3,去除C3的有向边。依次操作下去,直到所有顶点均被输出,最后得到一个序列:C1,C3,C2,C7,C4,C6,C5

关键路径

  1. 什么是AOE网
    ◎用一个带权有向图 (DAG)描述工程的预计进度。
    ◎顶点表示事件,有向边表示活动,边e的权c(e)表示完成活动e所需的时间(比如天数)。
    ◎图中入度为0的顶点表示工程的开始事件(如开工仪式),出度为0的顶点表示工程结束事件。

  2. 关键路径
    从AOE网中源点到汇点的最长路径,具有最大长度的路径叫关键路径。
    关键路径是由关键活动构成的,关键路径可能不唯一。
    在这里插入图片描述

  3. 求关键路径的过程
    (1)事件的最早开始和最迟开始时间
    事件v的最早开始时间:规定源点事件的最早开始时间为0。定义图中任一事件v的最早开始时间(early event) ee(v)等 于x、y、z到v所有路径长度的最大值:
    在这里插入图片描述
    (2)活动的最早开始时间和最迟开始时间
    在这里插入图片描述
    活动a的最早开始时间e(a)指该活动起点x事件的最早开始时间,即:
    e(a)=ee(x)
    活动a的最迟开始时间l(a)指该活动终点y事件的最迟开始时间与该活动所需时间之差,即:
    l(a)=le(y)-c (a)
    活动a的最迟开始时间l(a)与最早开始时间e(a)的差d(a),即d(a)=l(a)-e(a),当d(a)为0时,则该活动为关键活动。
    算法演示:
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    我们来分析下上面的演示过程:
    首先,先求最早开始时间e(a),即最长的路径长度,按拓扑排序ABCDEFGHI,依次求出各顶点的ee(a)值,e(a)值为该路径的前一个顶点ee(x)值。
    最迟开始时间l(a),按IHGFEDCBA的拓扑排序,此时的le(I)应用求最早开始时间ee(I)的值开始,由于求最迟开始时间l(a),求得的le(y)即最短的路径长度,l(a)的值为该路径的后一个顶点le(y)-c(a)的值。
    由此可知,关键活动有a11、a10、 a8、a7、a4、 a1,因此关键路径有两条: A-B-E-F-I和A-B-E-G-I。

    从关键路径可以看出:
    1.缩短某一活动,整个活动不一定会缩短。
    2.缩短某一关键活动时,整个活动也不一定会缩短。只有缩短所有关键路径共享的关键活动的时间,才可能整个工期缩短。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值