【图论】拓扑排序
拓扑排序是基于DAG的排序方法
定义
有向无环图(DAG),顶点线性排序使得对于每一个有向边,起始节点都在尾节点的前面
分析
记录每个点的入度
对于每个点,遍历它的所有出边并更新到达节点的入度,如果该到达节点的入度为 则加入队列
复杂度
应用
- 找环
- 找最长路
- 找优先级最大(等效于最长路)
1 | void toposort() |
- 字典序拓扑排序:上述队列改成优先队列,复杂度
关键路径
离散数学里学的东西,学之前完全没听说过…
- 定义:顶点表活动,有向边表优先级,这样的DAG称AOV(activity on vertex network);边有权值表时间,称AOE网(activity on edge);AOE网上的最长路径称关键路径,只有这条路径上的关键活动进行时间变化能够影响到整体时间。
- 节点的最早开始时间 ,最晚开始时间 。
- 以最早开始时间为例,对于边 ,更新操作: 。
- 正反图分别进行拓扑排序,过程中进行 的更新, 的点即为关键路径上的点。