拓扑排序与AOE图关键路径

来源:互联网 发布:女士香水哪款好闻知乎 编辑:程序博客网 时间:2024/05/22 11:54

今天大概讲一下拓扑排序和基于此的AOV网关键路径

拓扑排序:

大概流程:

  1. 选择一个入度为0的顶点并输出
  2. 然后从AOV网中删除此顶点及以此顶点为起点的所有关联边;
  3. 重复上述两步,直到不存在入度为0的顶点为止。
  4. 若输出的顶点数小于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]的关键活动

0 0