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

news2024/9/23 22:06:10

文章目录

  • 1.有向无环图(前置知识)
  • 2. 拓扑排序
    • 2.1 AOV网
    • 2.2 排序序列
  • 3.关键路径
    • 3.1 AOE网
    • 3.2 关键活动
      • 3.2.1 事件v~k~的最早发生时间v~e~(k)
      • 3.2.2 活动a~I~的最迟开始时间l(i)
      • 3.2.3 事件v~k~的最迟发生时间v~l~(k)
      • 3.2.4 活动a~I~的最早开始时间e(i)
      • 3.2.5 活动时间差额d(i)
    • 3.3 真题实战讲解(直接看就行)

本节重点:

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

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的活动就是关键路径,它的路径就是关键路径

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2158575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

插件MyBatis X

文章目录 插件插件MyBatis X 插件 插件MyBatis X 安装完重启idea 蓝色 sql映射文件 红色 mapper接口 点击对应的鸟&#xff0c;sql映射文件和对应mapper接口就能相互跳转

Python应用指南:利用高德地图API获取POI数据

随着地理信息系统&#xff08;GIS&#xff09;技术的发展&#xff0c;地理位置数据在城市规划、商业分析、旅游推荐等多个领域发挥着越来越重要的作用。POI&#xff08;Point of Interest&#xff0c;兴趣点&#xff09;数据作为地理信息的重要组成部分&#xff0c;提供了丰富的…

线程对象的生命周期、线程等待和分离

线程对象的生命周期、线程等待和分离 #include <iostream> #include<thread> using namespace std;bool is_exit false;//用于判断主线程是否退出 void ThreadMain() {cout << "begin sub thread main ID: " << this_thread::get_id() &l…

数据结构(Day19)

一、学习内容 单链表 头删 int front_dele(Plink L) {if(LNULL||L->len0){printf("头删失败\n");return -1;}Plink Q L->next;//保留要删除的1号节点L->next L->next->next;L->len--;free(Q);//释放空间QNULL;return 0; }尾删 int rear_dele(Pli…

JavaWeb - 5 - 前端工程化 Element

一.前后端分离开发 前后端混合开发 缺点&#xff1a;沟通成本高&#xff0c;分工不明确&#xff0c;不便管理&#xff0c;不便维护拓展 前后端分离开发 当前最为主流的开发模式&#xff1a;前后端分离 前后端分离开发中很重要的是API接口文档&#xff08;如&#xff1a;YApi&…

AH2212-12V转4.2V充电芯片

AH2212——12V转4.2V充电芯片&#xff0c;峰值2A输出编程电流&#xff0c;实现精准同步开关降压锂电池充电 随着科技的不断发展&#xff0c;移动电源、智能穿戴、电动工具等设备的应用越来越广泛&#xff0c;对电池充电芯片的需求也日益增大。本文将为您介绍一款高性能的充电芯…

通过iFIX在ARMxy边缘计算网关上实现维护管理

在当今快速发展的工业环境中&#xff0c;维护管理的有效性直接影响到生产效率和设备可靠性。随着物联网和边缘计算的兴起&#xff0c;传统的维护方式正在被更智能和高效的解决方案所替代。ARMxy系列的BL340控制器&#xff0c;凭借其灵活的IO配置和强大的处理能力&#xff0c;成…

linux使用docker安装运行kibana报错“Kibana server is not ready yet“的解决办法

首先docker log <container-id>查看日志是什么问题(以下是我的最后一条日志报错): {"type":"log","timestamp":"2024-09-23T12:27:0700:00","tags":["error","elasticsearch-service"],"pi…

【中关村在线-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

基于单片机的无线宠物自动喂食系统设计

本设计研究了一种无线宠物自动喂食器&#xff0c;其功能是先将宠物饲料放入其中&#xff0c;通过设定喂食时间点&#xff0c;当到达这一时间点后&#xff0c;系统开始播报语音同时控制步进电机转动&#xff0c;自动进行喂食。本设计主要研究怎么设定时间并进行投喂&#xff0c;…

(学习记录)使用 STM32CubeMX——GPIO引脚输出配置

学习总结&#xff1a;&#xff08;学习总结&#xff09;STM32CubeMX HAL库 学习笔记撰写心得https://blog.csdn.net/Wang2869902214/article/details/142435481 STM32F103C8T6的GPIO引脚输出配置 时钟配置 &#xff08;学习记录&#xff09;使用 STM32CubeMX——配置时钟&…

【软件工程】可行性研究

一、目的 二、任务 三、步骤 四、结果&#xff1a;可行性研究报告 例题 选择题

创新学生宿舍管理:Spring Boot框架实践

第2章 开发环境与技术 学生宿舍管理系统的编码实现需要搭建一定的环境和使用相应的技术&#xff0c;接下来的内容就是对学生宿舍管理系统用到的技术和工具进行介绍。 2.1 MYSQL数据库 本课题所开发的应用程序在数据操作方面是不可预知的&#xff0c;是经常变动的&#xff0c;没…

pdf怎么删除空白页?分享5个删除pdf页面的方法(批量删除法)

pdf文件因其跨平台、格式稳定的特性&#xff0c;已成为我们工作、学习中不可或缺的一部分。那么在编辑pdf格式文档中&#xff0c;总会遇到一些难题&#xff0c;比如说pdf怎么删除空白页 pdf与word一样&#xff0c;具备了多种编辑功能&#xff0c;只不过是word倾向于编辑&#x…

zabbix入门单机部署

zabbix官网 1进入官网后选择右上角Download 选择你要的版本以及需要的组件&#xff0c;网页下方会自动生成需要操作的步骤 &#xff0c;跟着步骤一步一步安装即可&#xff1a; 这里跟着官网步骤一步步走下去就可以了 但是需要注意的是安装 yum install centos-release-scl源…

活动报名| 探索存内计算的未来,共话AGI时代

活动日期&#xff1a;2024年09月28日 下午一点到6点 地点&#xff1a;杭州技术转移中心 三楼路演厅 议程亮点&#xff1a; 存内计算技术架构以及最新趋势AGI开源项目交流存内计算实操上板体验 存内计算 ——突破物理极限的下一代算力技术 直接消除“存”“算”界限&…

【C++】10道经典面试题带你玩转二叉树

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C ⚙️操作环境:Leetcode/牛客网 目录 一.根据二叉树创建字符串 二.二叉树的层序遍历 三.二叉树的层序遍历 II 四.二叉树的最近公共祖先 五.二叉搜索树与双向链表 六.从前序与中序遍历序列构造二叉树 七.从中序与后序遍历…

【笔记】机器学习算法在异常网络流量监测中的应用

先从一些相对简单的综述类看起&#xff0c;顺便学学怎么写摘要相关工作的&#xff0c;边译边学 机器学习算法在异常网络流量监测中的应用 原文&#xff1a;Detecting Network Anomalies in NetFlow Traffic with Machine Learning Algorithms Authors: Quc Vo, Philippe Ea, Os…

【雅特力AT32】I2C 配置工具Artery_I2C_Timing_Configuration的使用

功能 可以实现对主机和从机的时钟、数字滤波、模拟滤波配置。 环境安装 软件环境 Artery_I2C_Timing_Configuration.exe &#xff08;附件压缩包含安装包和配置工具使用指南&#xff0c;需要免费自取&#xff09; /*** function name:* - void i2c_init(i2c_type *i2c_x…

马尔科夫蒙特卡洛_吉布斯抽样算法(Markov Chain Monte Carlo(MCMC)_Gibbs Sampling)

定义 输入:目标概率分布的密度函数 p ( x ) p(x) p(x),函数 f ( x ) f(x) f(x) 输出: p ( x ) p(x) p(x)的随机样本 x m 1 , x m 2 , ⋯ , x n x_{m1},x_{m2},\cdots,x_n xm1​,xm2​,⋯,xn​,函数样本均值 f m n f_{mn} fmn​; 参数:收敛步数 m m m,迭代步数 n n n。 (1)初…