[Data Structure Algorithm] 有向无环图的拓扑排序及关键路径
基本名称
- 有向无环图 - DAG (Directed Acycline Graph)
- 如果图的邻接矩阵中,对角线以上(或以下)均为零,则说明该有向图为无环图;反之,不一定成立
- 顶点表示的活动网 - AOV网 (Activity On Vertex Network)
- 弧上没有权值
- 通常用于表示流程图
- 弧表示的活动网 - AOE网 (Activity On Edge)
- 弧上的权值 - 活动持续的时间
- 通常用于估算工程完成的时间
- 正常情况下(无环),图中只有一个入度为0的点(源点)和一个出度为0的点(汇点)
- 弧尾 - 在结点A指向结点B的弧中,结点A为弧尾
- 图中的结点数量 - n; 图中的弧数量 - e
拓扑排序 - 基于AOV网
- 分类
- 全序 - 拓扑有序
- 集合中所有结点都可比较(经过零个或多个结点后可连接)
- 偏序 - 只有部分结点是可比较的
- 全序 - 拓扑有序
- 可以求拓扑排序的图中不存在环
- 基本思想
1.遍历图中没有前驱(入度为0)的结点
2.选择并输出一个没有前驱的结点,循环与之相连的结点
3.删除该结点,和以该顶点作为弧尾的弧
4.如果下一结点为空,则重复2,3,直到所有结点均已全部输出(如果图中还存在有前驱的结点,则说明图中存在环) - 具体实现
- 结点结构 - 数据域(结点的值)|链域(指向下一个结点)|数据域(结点的入度)
- 引入栈
- 初始化 - 遍历所有结点,保存所有入度为0的结点
- 如果在输出结点并删除弧之后,有新增的入度为0的结点,再压入栈中
- 时间复杂度O(n+e)
关键路径 - 基于AOE网
- 定义
- ve(i) - 事件i的最早开始时间
- vl(i) - 事件i的最晚开始时间
- 关键路径 - 长度最长的路径
- 关键活动 - 关键路径上的所有活动,ve(i) = vl(i)
- 求解关键路径需要在拓扑有序和逆拓扑排序的前提下进行,即图中也不能存在环
- 基本思路
1.从源点vi出发,令ve(i) = 0,按拓扑有序求ve(j),取路径中的最大值
2.从汇点vn出发,在汇点上ve(n) = vl(n),按逆拓扑有序求vl(j),取路径中的最小值
3.所有ve(i)=vl(i)的点都是关键活动,其相连即为关键路径 - 具体实现
- 逆拓扑有序 - 将拓扑排序的序列存储在栈中,再将栈中元素弹出,即可得到逆拓扑排序
- 什么情况下,提高关键活动,才能对工程的进度产生影响
- 提高关键活动可能导致关键路径的改变,所以必须在关键路径不变的前提下
- 关键活动必须在所有关键路径上
转载于:https://www.cnblogs.com/break-dawnn/p/9780764.html
[Data Structure Algorithm] 有向无环图的拓扑排序及关键路径相关推荐
- 有向无环图DAG 拓扑排序 代码解释
目录: DAG定义 举例描述 实际运用 算法描述 算法实战 算法可视化 定义 在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological ...
- 【图论】有向无环图的拓扑排序
1. 引言 有向无环图(Directed Acyclic Graph, DAG)是有向图的一种,字面意思的理解就是图中没有环.常常被用来表示事件之间的驱动依赖关系,管理任务之间的调度.拓扑排序是对DA ...
- 数据结构-考研难点代码突破 (C++实现有向无环图的拓扑排序)
文章目录 1. AOV网 2. 拓扑排序 C++代码 1. AOV网 AOV网∶若用DAG 图(有向无环图)表示一个工程,其顶点表示活动,用有向边<Vi,Vj>表示活动 Vi必须先于活动V ...
- 判定有向无环图 (拓扑排序)
问题描述: 给出一张有向图,问它是否存在环. 解题思路: 这里可以用到拓扑排序. 拓扑排序的定义 拓扑排序应用于有向无环图之中,排序完以后会出现这样的性质:对于一个点p,只对排序位置在它之后的点有边. ...
- C#实现有向无环图(DAG)拓扑排序
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在 ...
- 有向无环图的拓扑排序
拓扑排序 对于一个有向无环图,我们可以这样确定一个图中顶点的顺序: 对于所有的u.v,若存在有向路径u-->v,则在最后的顶点排序中u就位于v之前.这样确定的顺序就是一个图的拓扑排序. ...
- 有向无环图的拓扑排序 关键路径
拓扑排序:在不违背先决条件的基础上将有向无环图排成线性序列 - 排序结果不唯一 - 用一维数组Indegree存储各顶点的入度 - 采用邻接表与队列 bool TopSort(LGraph Graph ...
- 带你了解有向无环图和拓扑排序
写在前面 如果觉得有所收获,记得点个关注和点个赞,感谢支持. 今天遇到有向无环图的一些问题,感觉挺有意思的,而且这些问题的思路特点都差不多,所以想着记录一下.在图论中,如果一个有向图无法从某个顶点出发 ...
- 有向无环图(DAG)拓扑排序的两种方法
如下图的DAG: 第一种: (1)从AOV网中选择一个没有前驱的顶点并且输出它: (2)从AOV网中删除该顶点,并且上去所有该顶点为尾的弧: (3)重复上述两步,直到全部顶点都被输出,或者AOV网中不 ...
- BUCT数据结构——图(拓扑排序、关键路径)
文章目录 问题 A: 邻接矩阵存储的图,节点的出度和入度计算(附加代码模式) 问题 B: 算法7-12:有向无环图的拓扑排序 问题 C: 有向图是否存在环? 问题 D: 图-节点的最早发生时间 问题 ...
最新文章
- MPB:EGFP荧光标记大肠杆菌的构建
- iOS开发工具篇:cocoaPods 添加第三方库链接报错
- base64转码java版
- 河北体检系统诚信企业推荐_应用多的隔膜计量泵价格诚信企业推荐
- openSSH离线升级(6.6->7.9),解决Linux安全漏洞(CVE-2018-15473)
- SpringBoot私人学习笔记
- request.getContextPath()
- eclipse中文版官方下载
- 想要糖尿病逆转,健康饮食必不可少
- 使用Matplotlib美化和修饰图形
- js 字符串 常用方法
- 第三阶段应用层——1.7 数码相册—电子书(4)—select支持多输入
- vue在filters中使用sort()无限循环踩坑实践
- excel模板报表转PDF下载
- 回顾2022,展望2023,笔耕不辍,钟情翰墨
- endNote教程-5、6-高效阅读文献+高效文献调研
- geopandas read_file报错RTreeError: Coordinates must be in the form (minx,
- 硕士期间两篇计算机sci二区,实验室两篇论文被SCI 2区期刊Neurocomputing接收
- python语言的变量_自兴人工智能------Python语言的变量认识及操作
- Read research papers and career advice | 怎么读论文/职场建议