数据结构基础详解:拓扑排序和关键路径_AOE网的详细画法


本节重点:

  • 有向无环图(前置知识)
  • ⭐️拓扑排序
  • ⭐️关键路径

1.有向无环图(前置知识)

有向无环图:若一个有向图中不存在环,则称为有向无环图,简称DAG图

在这里插入图片描述

2. 拓扑排序

2.1 AOV网

AOV网(用顶点表示活动的网)
DAG图表示一个工程。顶点表示活动。有向边<Vi,vj>表示活动vi必须先于活动vj进行

在这里插入图片描述

2.2 排序序列

如何排序?

首先明确每个顶点只出现一次
拓扑排序序列,就是找入度为0的结点输出,并把由它出去的边删除,直到AOV网空或当前网中不存在无前驱的顶点为止
逆拓扑排序序列,就是找到出度为0的结点输出,并把指向它的边删除,直到AOV网空或当前网中不存在无后继的顶点为止

可用另一种实现方式:DFS实现拓扑排序序列

3.关键路径

3.1 AOE网

在带权有向图中,以顶点表示事件,有向边表示活动,以边上的权值表示完成该活动的开销(所需时间),简称AOE网
在这里插入图片描述

AOE网的性质:
1️⃣事件发生后,活动才能开始
2️⃣活动都结束,事件才能发生,有些活动可以并行进行。

3.2 关键活动

关键活动:决定这个工程最快完成的活动,也是整个工程中最慢的活动。

求关键活动的几个重要参数:
事件记做vk,活动记做ai

  • 事件vk的最早发生时间ve(k)
  • 事件vk的最迟发生时间vl(k)
  • 活动aI的最早开始时间e(i)
  • 活动aI的最迟开始时间l(i)
  • 活动时间差额d(i)

明确两点:
1️⃣关键活动的最早开始时间和最迟开始时间相等,字面意思上理解,它之所以关键,是因为它中间没有弹性时间。
2️⃣我们通过计算事件的时间,可以推出活动的时间,即求事件最早发生时间,推出活动最迟开始时间,求事件最迟发生时间,推出活动最早开始时间。

3.2.1 事件vk的最早发生时间ve(k)

寻找最慢的路径决定事件的最早发生时间
通过拓扑排序,我们可以得知事件发生的先后顺序
从起点出发,到下一个事件,可能有多个路径,计算耗时最长的活动+上一个事件所用的时间=下一个事件的最早发生时间。

3.2.2 活动aI的最迟开始时间l(i)

活动的最迟开始时间,是由事件最早发生事件反推,比如v3事件最早开始于5分钟,指向它的活动由2个,一个需要2分钟,一个需要3分钟,那么活动的最迟开始时间就是5-2和5-3,活动最迟开始时间不能影响事件的发生时间

3.2.3 事件vk的最迟发生时间vl(k)

最迟发生时间是由终点反推回到起点
终点事件的最迟发生时间=终点事件的最早发生时间

因为终点肯定是关键活动,在关键路径上,所以终点事件的最迟发生时间=终点事件的最早发生时间

由终点的最迟发生时间,反推前一个事件的最迟发生时间。减去前置活动耗时最长的时间,就是前一个事件的最迟发生时间

3.2.4 活动aI的最早开始时间e(i)

活动的最早开始时间,就是它起点事件的最迟开始时间

3.2.5 活动时间差额d(i)

活动最迟开始时间-活动最早开始时间,差值就是弹性的时间,如果它的弹性时间=0,他就是关键活动,关键活动组成的路径就是关键路径。

注意:
1️⃣可能存在多条关键路径,只提高一条关键路径上的活动并不能缩短整个工程的工期,只有加快包括所有关键路径上的关键活动才能缩短工期。

3.3 真题实战讲解(直接看就行)

解题思路:
拓扑排序决定了事件最早的发生的顺序
逆拓扑排序决定了事件最晚发生的顺序

起点和终点的事件最早发生时间和事件最晚发生时间相同。

做题逻辑顺序:
1.写出拓扑排序和逆拓扑排序
2.由拓扑排序写出事件的发生顺序,开始算事件最早发生时间。起点的最早发生时间是0,从这开始写。下一个事件的最早发生事件,看前面的事件+最长的活动时间(就是最晚),到达下一个事件的时间就是算事件最早发生时间,以此类推。总结就是**,从前往后找最大**
3.从逆拓扑排序开始写,事件的最晚发生事件,由起点和终点的事件最晚发生时间相同,开写,看看前面最短的活动时间,前面事件的最早开始事件-最短的活动时间,总结就是从后往前找最小
4.活动最早的开始时间:就是活动弧尾指向事件的最早发生事件
5.活动最晚的开始时间:是活动弧头指向事件的最晚发生时间-活动时间

大总结,小口诀:

事件时间起手求,从前往后找最大,从后往前找最大
活动时间用箭头,最早弧尾,最晚弧头减活动。
注意:
终点事件的最晚发生时间就是关键路径长度
事件最早发生时间和最晚发生时间相同的事件就是关键事件
活动时间差值为0的活动就是关键路径,它的路径就是关键路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小徐要考研

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值