图论-拓扑排序-6-25
已结束
ACM/ICPC
开始于: 2024-6-23 23:00
700
小时
主持人:
5
<p style="box-sizing:inherit;color:rgba(0, 0, 0, 0.87);font-family:"font-size:19.2px;text-wrap:wrap;background-color:#FFFFFF;">
https://oi-wiki.org/graph/topo/
拓扑排序(Topological sorting)要解决的问题是如何给一个有向无环图的所有节点排序。
我们可以拿大学每学期排课的例子来描述这个过程,比如学习大学课程中有:「程序设计」,「算法语言」,「高等数学」,「离散数学」,「编译技术」,「普通物理」,「数据结构」,「数据库系统」等。按照例子中的排课,当我们想要学习「数据结构」的时候,就必须先学会「离散数学」,学习完这门课后就获得了学习「编译技术」的前置条件。当然,「编译技术」还有一个更加前的课程「算法语言」。这些课程就相当于几个顶点 , 顶点之间的有向边
就相当于学习课程的顺序。教务处安排这些课程,使得在逻辑关系符合的情况下排出课表,就是拓扑排序的过程。
但是如果某一天排课的老师打瞌睡了,说想要学习 数据结构,还得先学 操作系统,而 操作系统 的前置课程又是 数据结构,那么到底应该先学哪一个(不考虑同时学习的情况)?在这里,数据结构 和 操作系统 间就出现了一个环,显然同学们现在没办法弄清楚自己需要先学什么了,也就没办法进行拓扑排序了。因为如果有向图中存在环路,那么我们就没办法进行拓扑排序。
因此我们可以说 在一个 DAG(有向无环图) 中,我们将图中的顶点以线性方式进行排序,使得对于任何的顶点 到
的有向边
, 都可以有
在
的前面。
还有给定一个 DAG,如果从 到
有边,则认为
依赖于
。如果
到
有路径(
可达
),则称
间接依赖于
。
拓扑排序的目标是将所有节点排序,使得排在前面的节点不能依赖于排在后面的节点。
- 状态
- 已结束
- 规则
- ACM/ICPC
- 题目
- 6
- 开始于
- 2024-6-23 23:00
- 结束于
- 2024-7-23 3:00
- 持续时间
- 700 小时
- 主持人
- 参赛人数
- 5