拓扑排序与AOE图关键路径
来源:互联网 发布:女士香水哪款好闻知乎 编辑:程序博客网 时间:2024/05/22 11:54
今天大概讲一下拓扑排序和基于此的AOV网关键路径
拓扑排序:
大概流程:
- 选择一个入度为0的顶点并输出
- 然后从AOV网中删除此顶点及以此顶点为起点的所有关联边;
- 重复上述两步,直到不存在入度为0的顶点为止。
- 若输出的顶点数小于AOV网中的顶点数,则说明“有回路”,否则输出的顶点序列就是一种拓扑序列
具体实现拟采用栈的先进后出结构,进出依据的是是否有子节点,若没有子节点则入栈,删除所有与其关联的边,即其所有的父亲节点中不再包含此子节点。输出具体看题目要求,结合数组简单操作即可。
注意拓扑排序中不能存在环,不然任何节点都无法入栈。
AOE网与其关键路径:
AOE网我们使用点表示事(活动开始与结束),使用边表示活动,权值表示活动的性质(时间)
注意性质:
有以下性质:
① 只有在某顶点所代表的事件发生后,从该顶点出发的各有向边所代表的活动才能开始。
① 只有在进入某点的各有向边所代表的活动都已结束,该顶点所代表的时事件才能发生。
所以,某一活动完成的最短时间等于最长路径(最大权值和)
每一个活动都有其最早完成时间和最晚完成时间,每一个事件都有其最早开始时间和最晚开始时间。
计算
Ve(j)=max{ve(i) + dut(<i,j>)} (Ve(0)=0)
vl(i)=min{vl(j)-dut(<i,j>)}(vl(n)=ve(n))此处做一个逆拓扑排序,就是从后往前求
对每一项活动ai(1 ≤ i≤ m)求解
最早开始时间e(i)=ve(x);
最晚开始时间: l(i)=vl(y)-dut<x,y>
关键活动:
若某条弧满足 e(i)=l(i) ,则它是关键活动
当这条边的时间限制到达最大,即其时间一点不能变化,它就被称为关键活动
关键路径:
由关键活动构成
① 从源点V1出发,令Ve[1]=0,按拓扑序列求各顶点的Ve[i]
② 从汇点Vn出发,令Vl[n]=Ve[n],按逆拓扑序(可以用数组存储)列求其余各顶点的Vl[i]
③ 根据各顶点的Ve和Vl值,计算每条弧的e[i]和l[i],找出e[i]=l[i]的关键活动
具体操作流程:
1-输入顶点和弧信息,建立其邻接表
计算每个顶点的入度
2-对其进行拓扑排序
2.1-排序过程中求顶点的Ve[i]
2.2-将得到的拓扑序列进栈
3-按逆拓扑序列求顶点的Vl[i]
4-计算每条弧的e[i]和l[i],找出e[i]=l[i]的关键活动
- 拓扑排序与AOE图关键路径
- 图-----------拓扑排序+AOE网络关键路径
- 数据结构--图--拓扑排序/关键路径/AOE/AOV
- 图论-AOV网与拓扑排序&AOE网与关键路径 c++
- AOE网上的关键路径(拓扑排序+SPFA算法)
- 关键路径(AOE)—基于拓扑排序(AOV)
- 图(3)--拓扑排序与关键路径
- 图的拓扑排序与关键路径
- 图的关键路径与拓扑排序
- 拓扑排序与关键路径
- 拓扑排序与关键路径
- AOE网与关键路径
- 关键路径与AOE网
- 有向无环图(AOE)的拓扑排序和关键路径
- AOE图的关键路径
- 图的应用之拓扑排序与关键路径
- 第七章 图(拓扑排序与关键路径)
- 拓扑排序关键路径
- 剑指offer----连续子数组的最大和----java实现
- hdu 1069
- spark编程python实例
- 删除Xcode描述文件
- Dubbo实战(三)多注册中心配置
- 拓扑排序与AOE图关键路径
- HDU1258 Sum It Up
- 创建动态链接库,使用自己的dll中的排序算法,用Qt将排序用时在界面上用表格的形式呈现出来
- BM字符串匹配算法
- 安卓内存优化之--内存泄露
- Lua5.2 请求 luasocket 相关模块时的 multiple-lua-vms-detected
- 重入锁ReentrantLock
- 独上高楼
- lambda