拓扑排序--关键路径
2015-04-12 20:10
246 查看
拓扑排序和关键路径是基于无环的有向图。
主要用来表示工程进度中各个事件之间的关系。
拓扑排序和关键路径 使用邻接表存储数据,最小生成树和最短路径用 邻接矩阵 存储数据。
1、拓扑排序
AOV网:在一个表示工程的有向图中,用固定点表示活动,用弧表示活动之间的优先级关系,这样的有向图为顶点表示活动的网,我们称之为AOV网(Activity On Vertex Network)
拓扑排序:是将一个AOV网的各个顶点按一定顺序排列,要求满足若存在<Vi,Vj>,则排序中的顶点Vi必在顶点Vj之前。对于同一幅图,拓扑排序可有多个拓扑排序。
在显示生活中,用到的拓扑排序的例子:
学校课程布置图,要先修完一些基础课,才可以继续修专业课,以计算机软件专业为例,在《程序设计基础》和《离散数学》课程学完之前就不能开始学习《数据结构》,这些先决条件定义了课程之间的优先(领先)关系。
算法:
(1)从有向图中选择一个无前驱(入度为0)的顶点输出。
(2)删除此顶点,并删除已此顶点为为尾的弧。
(3)重复(1),(2)步骤,知道输出全部顶点或者AOV网中不存在入度为0的顶点。
具体实现代码:
用栈来保存入度为0的顶点,和更新后入度为0的顶点
分析整个算法,对一个具有n个顶点e条弧的AOV网来说,将入度为0的顶点入栈的时间复杂度为O(n),而之后的while循环中,每个顶点入一次栈,出一次栈,入度减1的操作执行了e次,所以整个算法时间复杂度为O(n+e)。
2、关键路径
拓扑排序是解决一个工程能否顺序进行的问题,但有时还需解决工程完成需要的最短时间。
AOE网:在一个表示工程带权的有向图中,用顶点表示事件,用有向边表示活动,用边上的权值表示活动的持续时间,这种用有向图的边表示活动的网,我们称之为AOE网(Activity On Edge Network)
用ve(i)表示事件(即顶点)i的最早开始时间,用vl(i)表示事件i的最开始时间,如果活动k由弧<m,n>表示,用dut(<m,n>)表示活动的持续时间,则有:
e(k) = ve(m)
l(k) = vl(n) - dut(<m,n>)
求解关键路径的具体算法(假设图中有n个顶点)
(1) 从开始顶点V0出发,假设ve(0)=0,然后按照拓扑有序求出其他各顶点i的最早开始时间ve(i),如果得到拓扑序列中顶点数目小于图中的顶点数,则表示图中存在回路,算法结束,否则继续执行。
(2)从结束顶点Vn出发,假设vl(n-1) = ve(n-1);然后求出各顶点i的最晚发生时间。
(3)根据顶点的最早发生时间,和最晚发生时间,依次求出出每条弧的最早开始时间和最晚开始时间,如果两只相等,则为关键活动。关键活动组成的路径则为关键路径。
具体实现代码:
主要用来表示工程进度中各个事件之间的关系。
拓扑排序和关键路径 使用邻接表存储数据,最小生成树和最短路径用 邻接矩阵 存储数据。
1、拓扑排序
AOV网:在一个表示工程的有向图中,用固定点表示活动,用弧表示活动之间的优先级关系,这样的有向图为顶点表示活动的网,我们称之为AOV网(Activity On Vertex Network)
拓扑排序:是将一个AOV网的各个顶点按一定顺序排列,要求满足若存在<Vi,Vj>,则排序中的顶点Vi必在顶点Vj之前。对于同一幅图,拓扑排序可有多个拓扑排序。
在显示生活中,用到的拓扑排序的例子:
学校课程布置图,要先修完一些基础课,才可以继续修专业课,以计算机软件专业为例,在《程序设计基础》和《离散数学》课程学完之前就不能开始学习《数据结构》,这些先决条件定义了课程之间的优先(领先)关系。
算法:
(1)从有向图中选择一个无前驱(入度为0)的顶点输出。
(2)删除此顶点,并删除已此顶点为为尾的弧。
(3)重复(1),(2)步骤,知道输出全部顶点或者AOV网中不存在入度为0的顶点。
具体实现代码:
用栈来保存入度为0的顶点,和更新后入度为0的顶点
2、关键路径
拓扑排序是解决一个工程能否顺序进行的问题,但有时还需解决工程完成需要的最短时间。
AOE网:在一个表示工程带权的有向图中,用顶点表示事件,用有向边表示活动,用边上的权值表示活动的持续时间,这种用有向图的边表示活动的网,我们称之为AOE网(Activity On Edge Network)
用ve(i)表示事件(即顶点)i的最早开始时间,用vl(i)表示事件i的最开始时间,如果活动k由弧<m,n>表示,用dut(<m,n>)表示活动的持续时间,则有:
e(k) = ve(m)
l(k) = vl(n) - dut(<m,n>)
求解关键路径的具体算法(假设图中有n个顶点)
(1) 从开始顶点V0出发,假设ve(0)=0,然后按照拓扑有序求出其他各顶点i的最早开始时间ve(i),如果得到拓扑序列中顶点数目小于图中的顶点数,则表示图中存在回路,算法结束,否则继续执行。
(2)从结束顶点Vn出发,假设vl(n-1) = ve(n-1);然后求出各顶点i的最晚发生时间。
(3)根据顶点的最早发生时间,和最晚发生时间,依次求出出每条弧的最早开始时间和最晚开始时间,如果两只相等,则为关键活动。关键活动组成的路径则为关键路径。
具体实现代码:
相关文章推荐
- 图功能的实现C++(最短路径,关键路径,拓扑排序,关节点,~~~~~~~~~~等等)
- 拓扑排序和关键路径
- 图(拓扑排序和关键路径)
- 拓扑排序和关键路径
- 拓扑排序关键路径
- 「数据结构作业」最短路,拓扑排序,关键路径,最小生成树
- 拓扑排序和关键路径
- PAT 关键活动 拓扑排序-关键路径
- 拓扑排序与关键路径
- hdu 4109(拓扑排序 关键路径)
- HDU 4109 拓扑排序(最短路思想)关键路径
- 图(3)--拓扑排序与关键路径
- 拓扑排序和关键路径
- 数据结构---->图的应用(拓扑排序,关键路径)
- 图的拓扑排序、关键路径、最短路径算法 -- C++实现
- 拓扑排序之关键路径(深度优先搜索)
- 拓扑排序和关键路径分析
- hdu 4109 拓扑排序 关键路径
- 图的顶点的拓扑排序,返回关键路径长度
- 拓扑排序(关键路径)