【数据结构笔记30】拓扑排序、AOV网络、AOE网络、关键工序
本次笔记内容:
8.2.1 拓扑排序
8.2.2 关键路径
文章目录
- 拓扑排序
- 引例:计算机专业排课(AOV网络)
- 拓扑排序的概念与AOV网络
- 拓扑排序的算法
- 更加聪明的算法
- 关键路径问题
- AOE(Activity On Edge)网络
- 例子:辅助理解Earliest与Latest
拓扑排序
引例:计算机专业排课(AOV网络)
如上图,可以将计算机课程先修关系绘制成AOV(Activity On Vertex)网络。
拓扑排序的概念与AOV网络
拓扑序:如果图中从V到W有一条有向路径,则V一定排在W之前。满足此条件的顶点序列称为一个拓扑序。
获得一个拓扑序的过程就是拓扑过程。
AOV如果有合理的拓扑序,则必定是有向无环图(Directed Acyclic Graph,DAG)。
如上图,AOV中不可能有环。
拓扑排序的算法
如上图,要注意,输出、抹去节点不是重点,重点是去掉边。
void TopSort()
{for (cnt = 0; cnt < | V | ; cnt++){V = 未输出的入度为0的顶点;if (这样的V不存在){Error("图中有回路");break;}输出V,或者记录V的输出序号;for (V的每个邻接点W)Indegree[W]--;}
}
时间复杂度为O(∣V∣2)O(|V|^2)O(∣V∣2)。
更加聪明的算法
随时将入度变为0的顶点放到一个容器里。
void TopSort()
{for (Indegree[V] == 0)Enqueue(V, Q);while (!IsEmpty(Q)){V = Dequeue(Q);输出V,或者记录V的输出序号;cnt++;for (V的每个邻接点W)if (--Indegree[W] == 0)Enqueue(W, Q);}if (cnt != | V |)Error("图中有回路");
}
时间复杂度降为了O(∣V∣+∣E∣)O(|V|+|E|)O(∣V∣+∣E∣)。
拓扑排序算法还可以检查是不是有向无环图(DAG)。
关键路径问题
AOE(Activity On Edge)网络
一般用于安排项目的工序。
AOE网络所示内容如上图。
例子:辅助理解Earliest与Latest
如上图,工序(4,6)和(4,7)需要等齐了(1,4)、(2,4)和(3,5)才能开工。因此引入虚工序概念进行表示。
如上图,最早完成时间和最晚完成时间如上图。
机动时间为D<i,j>=Latest[j]−Earliest[i]−C<i,j>D_{<i,j>} = Latest[j] - Earliest[i] - C_{<i,j>}D<i,j>=Latest[j]−Earliest[i]−C<i,j>
关键路径即,由绝对不允许延误的活动组成的路径。
【数据结构笔记30】拓扑排序、AOV网络、AOE网络、关键工序相关推荐
- 数据结构-----图的拓扑排序和关键路径算法
部分图片取自:http://www.cnblogs.com/navorse/articles/1893863.html 在介绍拓扑排序和关键路径之前,先引入AOE网络的概念: 该图为一个AOE网,顶点 ...
- 图算法入门4:活动网络-AOE网络和关键路径(critical path)
AOE网络的基本概念 上一节介绍了活动网络AOV网络的相关内容,这一节将进一步介绍另一种活动网络AOE网络.如果对于有向无环图(DAG),用有向边表示一个工程的各项活动(activity),边上的权值 ...
- aov建立Java模拟,数据结构之---C语言实现拓扑排序AOV图
//有向图的拓扑排序 //杨鑫 #include #include #include #define MAX_NAME 3 #define MAX_VERTEX_NUM 20 typedef int ...
- 图的拓扑排序(AOV网络)
文章目录 拓扑排序 概念 实现 邻接表(队列) 邻接矩阵(栈) 总结 源代码 邻接表 邻接矩阵 拓扑排序 概念 拓扑排序是对有向无环图的顶点的一种排序. AOV网络 : 在有向图中, 用顶点表示活动或 ...
- C语言数据结构与算法---拓扑排序、关键路径
文章目录 一. 有向无环图 二. 拓扑排序 1. 分析 2. 拓扑排序的定义及方法 3. 拓扑排序的重要应用 4. 拓扑排序的算法实现 三. 关键路径 1.分析 2. 什么是关键路径 3. 关键路径的 ...
- 拓扑排序---AOV图
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中全部顶点排成一个线性序列, 使得图中随意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出如 ...
- 数据结构与算法—拓扑排序
目录 介绍 拓扑排序算法分析 拓扑排序代码实现 介绍 拓扑排序,很多人都可能听说但是不了解的一种算法.或许很多人只知道它是图论的一种排序,至于干什么的不清楚.又或许很多人可能还会认为它是一种啥排序.而 ...
- 输出dag的所有拓扑排序序列_算法学习笔记(53): 拓扑排序
拓扑排序是对DAG(有向无环图)上的节点进行排序,使得对于每一条有向边 , 都在 之前出现.简单地说,是在不破坏节点 先后顺序的前提下,把DAG拉成一条链.如果以游戏中的科技树(虽然名字带树,其实常常 ...
- 数据结构笔记:选择排序
原文地址添加链接描述 分类目录--数据结构笔记 每一步在未排序部分去比较当前标记的最小值(初始化为第1个)与当前值的大小,更新(或不跟新)最小值的索引,维护的是一个最小值的索引 每一轮找一个最小值,替 ...
最新文章
- MOG2 成员函数参数设定
- 菜鸟学习.Net的感想!
- JsonHelper
- linux系统硬盘使用过高,磁盘IO过高时的处理办法
- first-child伪类选择器没有效果(不起作用)
- jdbc preparestatement 执行多条语句_第二十一天JDBC编程
- Javascript 装载和执行
- 复制的时候提示下标越界_移动硬盘打不开提示格式化怎么办?
- SharePoint2010内容类型剖析(四)
- P1268-树的重量【图论】
- buffer java nio_Java NIO深入理解Buffer(缓冲区)
- LeetCode 638. 大礼包(无限背包DP)
- vue设置输入框输入长度_Vue实现input宽度随文字长度自适应操作
- 转:怎样开始学习php代码审计?
- 精心准备了10个行业30张大屏模板,0代码直接套用
- 适合程序员演讲的定场诗
- python语言字符串逆转顺序_Python字符串逐字符或逐词反转方法
- pyspark连接MySQL数据库,执行SQL语句,返回数据查询结果
- 关注公众号回复图片php,公众号被关注回复可以回复文字加图片消息吗? | 微信公众号指南...
- 微信支付小程序支付和APP支付
热门文章
- java中的原型模式_java中的原型模式理解
- codeblocks和vscode编译时弹出不支持的16位程序解决方案
- 【问题解决】解决eclipse不识别Android手机的问题
- nginx 启动报错 “/var/run/nginx/nginx.pid“ failed” 解决方法
- @class与#import
- win11非活动窗口如何设置 Windows11设置非活动窗口的步骤方法
- xml,String互转
- windows命令总结
- stm32 JTAG和SWD的使用区别简要介绍
- msyql之查询某字段值重复的数据个数