本次笔记内容:
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网络、关键工序相关推荐

  1. 数据结构-----图的拓扑排序和关键路径算法

    部分图片取自:http://www.cnblogs.com/navorse/articles/1893863.html 在介绍拓扑排序和关键路径之前,先引入AOE网络的概念: 该图为一个AOE网,顶点 ...

  2. 图算法入门4:活动网络-AOE网络和关键路径(critical path)

    AOE网络的基本概念 上一节介绍了活动网络AOV网络的相关内容,这一节将进一步介绍另一种活动网络AOE网络.如果对于有向无环图(DAG),用有向边表示一个工程的各项活动(activity),边上的权值 ...

  3. aov建立Java模拟,数据结构之---C语言实现拓扑排序AOV图

    //有向图的拓扑排序 //杨鑫 #include #include #include #define MAX_NAME 3 #define MAX_VERTEX_NUM 20 typedef int ...

  4. 图的拓扑排序(AOV网络)

    文章目录 拓扑排序 概念 实现 邻接表(队列) 邻接矩阵(栈) 总结 源代码 邻接表 邻接矩阵 拓扑排序 概念 拓扑排序是对有向无环图的顶点的一种排序. AOV网络 : 在有向图中, 用顶点表示活动或 ...

  5. C语言数据结构与算法---拓扑排序、关键路径

    文章目录 一. 有向无环图 二. 拓扑排序 1. 分析 2. 拓扑排序的定义及方法 3. 拓扑排序的重要应用 4. 拓扑排序的算法实现 三. 关键路径 1.分析 2. 什么是关键路径 3. 关键路径的 ...

  6. 拓扑排序---AOV图

    对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中全部顶点排成一个线性序列, 使得图中随意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出如 ...

  7. 数据结构与算法—拓扑排序

    目录 介绍 拓扑排序算法分析 拓扑排序代码实现 介绍 拓扑排序,很多人都可能听说但是不了解的一种算法.或许很多人只知道它是图论的一种排序,至于干什么的不清楚.又或许很多人可能还会认为它是一种啥排序.而 ...

  8. 输出dag的所有拓扑排序序列_算法学习笔记(53): 拓扑排序

    拓扑排序是对DAG(有向无环图)上的节点进行排序,使得对于每一条有向边 , 都在 之前出现.简单地说,是在不破坏节点 先后顺序的前提下,把DAG拉成一条链.如果以游戏中的科技树(虽然名字带树,其实常常 ...

  9. 数据结构笔记:选择排序

    原文地址添加链接描述 分类目录--数据结构笔记 每一步在未排序部分去比较当前标记的最小值(初始化为第1个)与当前值的大小,更新(或不跟新)最小值的索引,维护的是一个最小值的索引 每一轮找一个最小值,替 ...

最新文章

  1. MOG2 成员函数参数设定
  2. 菜鸟学习.Net的感想!
  3. JsonHelper
  4. linux系统硬盘使用过高,磁盘IO过高时的处理办法
  5. first-child伪类选择器没有效果(不起作用)
  6. jdbc preparestatement 执行多条语句_第二十一天JDBC编程
  7. Javascript 装载和执行
  8. 复制的时候提示下标越界_移动硬盘打不开提示格式化怎么办?
  9. SharePoint2010内容类型剖析(四)
  10. P1268-树的重量【图论】
  11. buffer java nio_Java NIO深入理解Buffer(缓冲区)
  12. LeetCode 638. 大礼包(无限背包DP)
  13. vue设置输入框输入长度_Vue实现input宽度随文字长度自适应操作
  14. 转:怎样开始学习php代码审计?
  15. 精心准备了10个行业30张大屏模板,0代码直接套用
  16. 适合程序员演讲的定场诗
  17. python语言字符串逆转顺序_Python字符串逐字符或逐词反转方法
  18. pyspark连接MySQL数据库,执行SQL语句,返回数据查询结果
  19. 关注公众号回复图片php,公众号被关注回复可以回复文字加图片消息吗? | 微信公众号指南...
  20. 微信支付小程序支付和APP支付

热门文章

  1. java中的原型模式_java中的原型模式理解
  2. codeblocks和vscode编译时弹出不支持的16位程序解决方案
  3. 【问题解决】解决eclipse不识别Android手机的问题
  4. nginx 启动报错 “/var/run/nginx/nginx.pid“ failed” 解决方法
  5. @class与#import
  6. win11非活动窗口如何设置 Windows11设置非活动窗口的步骤方法
  7. xml,String互转
  8. windows命令总结
  9. stm32 JTAG和SWD的使用区别简要介绍
  10. msyql之查询某字段值重复的数据个数