基本名称
- 有向无环图 - 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)的点都是关键活动,其相连即为关键路径
- 具体实现
- 逆拓扑有序 - 将拓扑排序的序列存储在栈中,再将栈中元素弹出,即可得到逆拓扑排序
- 什么情况下,提高关键活动,才能对工程的进度产生影响
- 提高关键活动可能导致关键路径的改变,所以必须在关键路径不变的前提下
- 关键活动必须在所有关键路径上
posted @
2018-10-15 21:17
break大蜗牛
阅读(
349)
评论()
编辑
收藏
举报