算法学习(十一)拓扑排序

拓扑排序

1. 概念

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

过程:

markdown 复制代码
在一个有向图中,对所有的节点进行排序,要求没有一个节点指向它前面的节点。
先统计所有节点的入度,对于入度为0的节点就可以分离出来,然后把这个节点指向的节点的入度减一。
一直做改操作,直到所有的节点都被分离出来。
如果最后不存在入度为0的节点,但还存在节点,那就说明有环,不存在拓扑排序,也就是很多题目的无解的情况。

算法:

markdown 复制代码
第一种方式

是遍历整个图中的顶点,找出入度为0的顶点,然后标记删除该顶点,更新相关顶点的入度,由于图中有V个顶点,每次找出入度为0的顶点后会更新相关顶点的入度,因此下一次又要重新扫描图中所有的顶点。故时间复杂度为O(V^2)

问题:由于删除入度为0的顶点时,只会更新与它邻接的顶点的入度,即只会影响与之邻接的顶点。但是上面的方式却遍历了图中所有的顶点的入度。
第二种方式(更优的算法)

先将入度为0的顶点放在栈或者队列中。当队列不空时,删除一个顶点v,然后更新与顶点v邻接的顶点的入度。只要有一个顶点的入度降为0,则将之入队列。此时,拓扑排序就是顶点出队的顺序。该算法的时间复杂度为O(V+E)

2. 解题技巧(我的总结)

1> 拓扑排序

题目 说明 实现
210. 课程表 II 拓扑排序 我的提交
310. 最小高度树 拓扑排序 我的提交
684. 冗余连接 拓扑排序 我的提交

3. 更多练习

4. 参考

  1. 拓扑排序及算法实现
  2. 总库:tryHard
相关推荐
爱学大树锯21 小时前
592 · 查找和替换模式
算法
知识分享小能手21 小时前
Ubuntu入门学习教程,从入门到精通, Ubuntu 22.04 的软件包管理 —— 全面详解(9)
linux·学习·ubuntu
爱学大树锯21 小时前
775 · 回文对
算法
girl-072621 小时前
2025.12.26代码分析
数据结构·算法
大罗辑21 小时前
2026软考备考刷题:软件设计师经典100题(5)含详细解析
算法·软考·软件设计师·2026软考·软设备考
咕噜企业分发小米21 小时前
阿里云Milvus支持哪些向量检索算法?
算法·机器学习·milvus
蒙奇D索大21 小时前
【数据结构】排序算法精讲|折半插入排序全解:高效优化、性能对比、实战剖析
数据结构·学习·考研·算法·排序算法·改行学it
有个人神神叨叨21 小时前
odoo 学习- 01. Odoo 工程结构概览
学习
有个人神神叨叨21 小时前
odoo 学习- 02. Odoo 核心框架探究
学习
汽车仪器仪表相关领域21 小时前
ZDT-III 通用电机测试系统
数据库·算法·单元测试·压力测试·可用性测试