【algo&ds】9.拓扑排序、AOV&AOE、关键路径问题

对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序

使用场景

【algo&ds】9.拓扑排序、AOV&AOE、关键路径问题_第1张图片

【algo&ds】9.拓扑排序、AOV&AOE、关键路径问题_第2张图片

可以参考视频

伪码描述

void TopSort() {
    for ( 图中每个顶点V )
        if ( Indegree[V]==0 )
            Enqueue( V, Q );
    while ( !IsEmpty(Q) ) {
        V = Dequeue( Q );
        输出V,或者记录V的输出序号;
        cnt++;
        for ( V 的每个邻接点W )
            if ( ––Indegree[W]==0 )
                Enqueue( W, Q );
    }
    if ( cnt != |V| )
        Error( “图中有回路” );
}

AOV和AOE

  • AOV(Activity On Vertex),用顶点表示活动,而用边集表示活动间优先关系的有向图,常用于拓扑排序计算,途中不应该出现有向环。
  • AOE(Activity On Edge),用带权的边集表示活动,用顶点表示事件,其中边权表示完成活动所需要的时间,事件仅代表一个中间状态。

关键路径问题

【algo&ds】9.拓扑排序、AOV&AOE、关键路径问题_第3张图片

【algo&ds】9.拓扑排序、AOV&AOE、关键路径问题_第4张图片

注意理解图中虚线的含义!!!

可以参考视频

你可能感兴趣的:(【algo&ds】9.拓扑排序、AOV&AOE、关键路径问题)