【图论】拓扑排序与关键路径

数据结构复习:拓扑排序与关键路径解析
本文介绍了数据结构中的拓扑排序及其应用,包括找环、找最长路和优先级最大问题。还详细讲解了关键路径的概念,如何在AOV和AOE网中寻找关键路径,并通过正反图进行拓扑排序更新最早和最晚开始时间。拓扑排序和关键路径在项目管理和工程优化中有重要应用。

数据结构期末抱佛脚,发现没学过关键路径,补上~

拓扑排序

  • 有向无环图,顶点线性排序使得对于每一个有向边,起始节点都在尾节点的前面
  • 前提:DAG
  • 需要记录一个点的入度,对于每个点,删去所有出边并更新到达节点的入度,每次加入入度为0的点,复杂度O(E+V)O(E+V)O(E+V)
  • 应用:找环;找最长路;找优先级最大(等效于最长路);
  • 字典序拓扑排序:上述队列改成优先队列,复杂度O(E+Vlog⁡V)O(E+V\log V)O(E+VlogV)
void toposort()
{
    while (!topo.empty())
    {
        int cur = topo.front();
        topo.pop();
        for (int i = 1; i <= n; i++)
        {
            if (graph[cur][i])
            {
                in[i]--;
                { 
                	// 进行操作
                }
                if (!in[i])
                    topo.push(i);
            }
        }
    }
}

应用:关键路径

  • 定义:顶点表活动,有向边表优先级,这样的DAG称AOV(activity on vertex network);边有权值表时间,称AOE网(activity on edge);AOE网上的最长路径称关键路径,只有这条路径上的关键活动进行时间变化能够影响到整体时间。
  • uuu 节点的最早开始时间ve[u]ve[u]ve[u] ,最晚开始时间vl[u]vl[u]vl[u]
  • 以最早开始时间为例,对于边(u,v,w)(u,v,w)(u,v,w) ,更新操作:ve[v]=max(ve[v],ve[u]+w)ve[v]=max(ve[v],ve[u]+w)ve[v]=max(ve[v],ve[u]+w)
  • 正反图分别进行拓扑排序,过程中进行ve,vlve,vlve,vl 的更新,ve[u]=vl[u]ve[u]=vl[u]ve[u]=vl[u] 的点即为关键路径上的点。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值