文章目录

  • dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_有向无环图
  • dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_拓扑排序_02

DAG

  • 有向无环图:GAG=directed acyclic graph
  • acyclic/ˌeɪ’saɪklɪk/非周期的;非循环的;无环的
  • 有向无环图是不存在顺时针环和逆时针环的图
  • 描述含有公共子表达式的有效工具

AOV

  • Activity On Vertex (AOV) Network:
  • **a directed graph in whichthe vertices represent tasks or activities and **
  • the edges represent precedence relations between tasks.
  • dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_拓扑排序_03
  • AOV网中的活动具有传递性,

拓扑排序

  • 对DAG的顶点进行的一种排序,使得,若存在A到B的路径,则在排序中,顶点B出现在A之后
  • AOV网有一个或者多个拓扑序列序列

拓扑排序算法

  • 遍历所有顶点的入度
  • 将所有入度为0的顶点(没有前驱)压入栈中
  • 输出这个被弹出的顶点,同时计数已经弹出的顶点个数
  • 检查0度顶点栈,如果栈中非空,则弹出栈顶元素i
  • 并且扫描出栈的顶点i指向的顶点(即顶点i的邻接顶点),将它们的入度减去1(撤掉被弹出元素相关的边)
  • 这样可能得到新的入度为0的顶点,则把这样的顶点也压入栈中
  • 检查拓扑排序是否成功(输出计数是否和图的顶点数一致)
  • 如果不一致,说明被排序图是不是DAG,而是存在环路的

性能分析

  • 如果图采用邻接表存储,那么时间复杂度为O(|V|+|E|)
  • |V|是因为要遍历每个顶点(输出全部顶点)
  • |E|是要访问0度点的邻接边,最终全图的所有边被访问一遍
  • 如果是邻接矩阵,访问所有边的时间复杂度为dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_关键路径_04

逆拓扑排序

  • 定义上形式和拓扑排序和相似,入度为0改为了出度为0
  • 对一个AOV网采用如下步骤进行排序,则称为逆拓扑排序
  • 从AOV网中选择一个没有后继的(出度为0)的顶点,并输出
  • 从网中删除被输出的元素以及以该元素为终点的有向边
  • 重复上述步骤知道AOV网为空
  • 在求解AOE的事件发生最迟时间时,会用到逆拓扑排序

AOE

  • Activity On Edge(AOE) Network:
  • 用边表示活动的网络
  • 和AOV一样,都是DAG
  • AOE,AOV的顶点和边的含义不同
  • dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_算法_05
  • AOE的边:表示活动,且边的权值表示完成该活动的开销
  • dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_关键路径_06

关键路径

  • 具有最大路径长度的路径称为​​关键路径​
  • 完成整个工程所需要的最短时间就是关键路径的长度
  • 关键路径上的活动称为关键活动

AOE时间点相关概念和问题

  • 教材的紧凑的描述语言
  • dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_算法_07

dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_算法_08

  • ve=VertexEarliest
  • 它是指,从原点v1到顶点vk的最长路径长度
  • dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_关键路径_09
  • 它可以用一个递推公式来计算
  • dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_拓扑排序_10
  • dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_拓扑排序_11
  • 其中,dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_有向无环图_12

dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_算法_13

  • vl:VertexLatest
  • 类似的,也可以用递推公式来计算
  • dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_拓扑排序_14//可见,计算事件最晚发生vl依赖于事件最早发生时间ve
  • dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_算法_15
  • dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_算法_16
  • dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_拓扑排序_17

弧的相关时间结点

  • 有了前面两个概念的铺垫,我们可以比较容易的导出:活动弧的最早开始时间和最晚开始时间
  • dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_算法_18

弧的最早开始时间

  • e=Earliest
  • dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_算法_19

弧的最晚开始时间

  • dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_拓扑排序_20
  • dataStructure_图的应用DAG/AOV/拓扑排序/AOE/关键路径和关键活动_拓扑排序_21
  • 注意,有的弧开始时间可以早或晚一些,但是活动完成需要的时间长度是不变的

关键活动

  • 满足e(i)=l(i)的弧(活动)就是关键活动
  • 无法提前开始,也无法推迟开始
  • 关键路径上的活动(弧)都是关键活动
  • 网络中的关键有时不唯一,对于存在多条关键路径的网,只有加快被所有关键路径都包括了的关键活动才能够达到缩短工期的目的
  • 因此,加快关键活动的完成只是缩短工期的必要条件,不是充分条件(不保证能够缩短工期)