**有向无环图之关键路径**

1 AOE-网:边表示活动的网。AOE-网是一个带权的有向无环图,其中顶点表示事件,弧表示活动,权表示活动持续的时间。

2 通常AOE-网可用来估算工程的完成时间。

例图:

该图总共有11项活动,9个事件。每个事件表示在它之前的活动已完成,在它之后的活动可以开始,如a表示整个工程开始,i表示整个工程结束,e表示<b,e>活动和<c,e>活动已经完成。网中只有一个入度为零的点(称作源点)和一个出度为零的点(叫做汇点)。

3 AOV-网要研究的问题是:

3.1 完成整个工程至少需要多少时间?

3.2 哪些活动是影响工程进度的关键?

4

4.1 由于在AOV-网中有些活动是可以并行的进行,所以完成工程的最短时间是从开始点到完成点的最长路径的长度(这里所说的路径长度是指路径上各项活动持续时间之和,不是路径上弧的数目)。

4.2 路径长度最长的路径叫做关键路径(Critical Path)。

4.3 假设开始点事a,从a到g的最长路径长度叫做事件g的最早发生时间,这个时间决定了所有以g为尾的弧所表示的活动的最早开始时间。我们可以用e(i)(这个e不是图中的顶点e,只是个代号,当然也可以用其他的字母表示,i表示数字递增,e(i)意思是第几个活动)表示第i个活动的最早开始时间,还可以定义一个活动的最迟开始时间l(i),这是在不推迟整个工程完成的前提下,第i个活动最迟必须开始的时间。两者之差意味着完成第i个活动的时间余量,就是还可以推迟多久必须开始。我们把最迟开始时间和最早开始时间相等的活动叫做关键活动。

4.4 显然,关键路径上的所有活动都是关键活动。该图的一个关键路径是(a,b,e,h,i),源点到汇点的最长路径长度是:18

4.5 第i个活动的最迟开始时间计算:源点到汇点的最长路径的长度-该活动到汇点的最长路径长度

如<d,f>活动的最迟开始时间:18-<d,f>-<f,h>-<h,i>=18-2-4-4=8

4.6 第i 个活动的最早开始时间计算:第i个活动之前的最长路径的长度

如<d,f>活动的最早开始时间:<a,d>=5

4.7 <d,f>的最迟开始时间是8,最早开始时间是5,这就意味着<d,f>活动可以推迟3天开始(8-5),都不会影响整个工程的完成。

4.8 分析关键路径的目的是辨别哪些是关键活动,以便争取提高关键活动的工效,缩短整个工期。

5 AOE-网的关键路径算法思想:求关键活动就是要找e(i)=l(i)的活动。为了求得AOE-网中活动的e(i)和l(i),首先应求得事件的最早发生时间ve(j)和最迟发生时间vl(j),**因为活动是弧,以顶点(事件)为尾,活动所依赖的事件开始,活动也就开始了**。

5.1 如果活动由弧<j,k>表示,其持续时间记为dut(<j,k>),则有如下关系:e(i)=ve(j)l(i)=vl(k)-dut(<j,k>)(vl(k)-dut(<j,k>)其实就是vl(j),上面解释过了为什么)

5.2 ve(j)和vl(j)需要分两步进行:

** 从ve(1)=0开始向前递推ve(j)=Max{ve(i)+dut(<i,j>)},其中<i,j>为图中的弧

** 从vl(n)=ve(n)起向后递推vl(i)=Min{vl(j)-dut(<i,j>)},其中<i,j>为图中的弧

这两个公式的计算必须分别在拓扑有序和逆拓扑有序的前提下进行,也就是说,ve(j)必须在v(j)(第j个顶点)的所有前驱的最早发生时间求得之后才能确定,而vl(j)则必须在v(j)的所有后继的最迟发生时间求得之后才能确定,因此可以在拓扑排序的基础上计算。

6 c语言实现上述算法的代码:git@github.com:hglspace/GetCriticalPath.git

有向无环图之关键路径相关推荐

  1. 数据结构(六):图的概念、存储方式、基本操作、最小生成树、最短路径、有向无环图、关键路径 | Prim、Kruskal算法 | BFS、Dijkstra、Floyd算法 | 拓扑排序 | 求关键路径

    文章目录 第六章 图 一.图 (一)图的定义 (二)图逻辑结构的应用 (三)无向图.有向图 (四)简单图.多重图 (五)顶点的度.入度.出度 (六)顶点-顶点的关系描述 (七)连通图.强连通图 (八) ...

  2. 有向无环图——AOE网(关键路径)

    有向无环图:无环的有向图,简称DAG图(Directed Acycline Graph) 有向无环图常用来描述一个工程或系统的进行过程.(通常吧计划.施工.生产.程序流程等当成是一个工程) 一个工程可 ...

  3. 有向无环图的拓扑排序 关键路径

    拓扑排序:在不违背先决条件的基础上将有向无环图排成线性序列 - 排序结果不唯一 - 用一维数组Indegree存储各顶点的入度 - 采用邻接表与队列 bool TopSort(LGraph Graph ...

  4. 有向无环图—关键路径详解(最通俗易懂的版本)【数据结构】

    文章目录 有向无环图 拓扑排序 AOV-网 AOE-网 关键路径的概念 事件的最早/晚开始时间 事件和活动的区分 活动的最早/晚开始时间 有向无环图 拓扑排序 AOV-网 由于有向无环图可以用一种自然 ...

  5. 48. 数据结构笔记之四十八的有向无环图的应用关键路径

    48. 数据结构笔记之四十八的有向无环图的应用关键路径 "富贵不淫贫贱乐 , 男儿到此是豪雄.-- 程颢" 来看下有向无环图的另一个应用关键路径. 1.  关键路径 与AOV-网相 ...

  6. 数据结构7.5_有向无环图及其应用

    一个无环的有向图称做有向无环图,简称DAG图. 检查一个有向图是否存在环要比无向图复杂. 对于无向图来说,若深度优先遍历过程中遇到回边(即指向已访问过的顶点的边),则必定存在环. 而对于有向图来说,这 ...

  7. 朋友圈技术范儿装X指南-有向无环图

    这是我的第70篇原创 拼奢侈品装名媛,实在是太LOW了.真正的奢侈品不是外物,而是知识!是科学!你看我,从来没告诉过任何人,我开过私人飞机. 所以,今天要给大家分享一个可以在朋友圈装X的词:有向无环图 ...

  8. 有向无环图——AOV网及拓扑排序

    有向无环图--AOV网及拓扑排序 有向无环图 无环的有向图叫有向无环图,简称DAG图 其应用大致如下: 在工程计划和管理方面有着广泛而重要的应用 描述一项工程或系统的进行进程的有效工具 对整个工程和系 ...

  9. 【数据结构】图4——图的应用(最小生成树、最短路径、有向无环图)

    文章目录 生成树 最小生成树 构造最小生成树(MST) 构造最小生成树方法 普里姆(Prim)算法 克鲁斯卡尔(Kruskal)算法 两种算法比较 最短路径 迪杰斯特拉(Bijkstra)算法 弗洛伊 ...

最新文章

  1. C语言的指针、链表的原理和各类操作
  2. Java动态代理代码快速上手
  3. 《最后期限》阅读笔记2
  4. 用来枚举属性的对象工具函数
  5. 不到200行代码实现一个不断旋转的椭圆动画效果
  6. IDEA设置类、方法注释模板
  7. [Java网络编程基础]端口,协议
  8. XDP: eXpress Data Path
  9. AI 修复 100 年前晚清影像喜提热搜,有穿越内味儿了!
  10. 每一个写博客的程序猿,都应该被温柔对待
  11. jdk8 32位_HashMap源码分析 jdk8
  12. windows配置jdk环境变量、mysql环境变量、tomcat环境变量、maven环境变量、git环境变量、node环境变量
  13. 凯恩帝k1000ti参数设置_凯恩帝公司K1000T系统用户手册.pdf
  14. 后台api接口幂等防止数据篡改,看完发现心领神会
  15. Linux 用户 quote 配置 说明
  16. 如何在百度地图、腾讯地图标注公司地址信息?
  17. 《MySQL系列》MySQL详细入门教程
  18. springboot整合德鲁伊
  19. 鲁大师2022牛角尖颁奖盛典落幕,年度最强产品揭晓!
  20. 优秀logo设计解析_优秀logo设计作品及寓意解析,国外精品logo设计图片分享

热门文章

  1. 如何登陆系统服务器,linux系统 怎么登陆服务器
  2. 标准归一化和最大最小归一化
  3. php 模板 {{}},PHP字符串模板引擎
  4. 安装stable-diffusion时gfpgan安装失败
  5. ZooKeeper 避坑实践:如何调优 jute.maxbuffer
  6. python shutil module
  7. 友情链接,重在友情还是重在链接?
  8. 关于数据结构的学习目标
  9. 【40张linux思维导图】
  10. session和Cookies的区别