简化您的工作流程:搜索 miniwebtool。
添加插件
相关工具
邻接矩阵计算器迪杰斯特拉最短路径计算器图着色计算器图度数序列验证器哈密顿路径检查器最小生成树计算器网络最大流计算器平面图检查器稳定婚姻问题求解器斯特林数计算器
主页 > 数学 > 进阶数学计算 > 拓扑排序计算器
 

拓扑排序计算器

使用 Kahn 算法或 DFS 计算有向无环图 (DAG) 的拓扑排序。支持检测循环并报告路径、构建并行执行层级视图、支持字典序最小排序,并提供交互式图表的步骤动画演示。

拓扑排序计算器
边格式:A -> B (也接受 , =>, :)。最多 80 个顶点 / 800 条边。
Kahn 算法(字典序)给出唯一的、可重现的顺序。DFS 后序遍历是经典的深度优先方法。

Embed 拓扑排序计算器 Widget

拓扑排序计算器

拓扑排序计算器用于计算有向无环图 (DAG) 顶点的线性排序,使得对于从 u 到 v 的每一条有向边,u 都在 v 之前。以边列表或邻接表的形式输入图数据,该工具将使用 Kahn 算法或 DFS 后序遍历返回拓扑排序结果,检测环(并给出精确的环路径),将任务划分为并行执行层,计算有效排序的总数,并在交互式图表上以动画形式演示每一步。

什么是拓扑排序?

给定一个有向图 G = (V, E),拓扑排序(或拓扑序列)是其顶点的一种线性排列 v₁, v₂, …, vₙ,使得对于每一条有向边 (u → v),u 在排列中都出现在 v 之前。当且仅当图中没有有向环时(即该图为 DAG),才存在拓扑排序。这种排序通常不是唯一的:当多个顶点的入度同时为零时,图可以有多种有效的拓扑排序。

拓扑排序定义
V 的一个排列 (v₁, v₂, …, vn) 是拓扑排序,当且仅当
对于 E 中的每一条边 (u → v):position(u) < position(v)

此计算器使用的算法

Kahn 算法 (基于 BFS,1962年)

Kahn 算法是最直观的拓扑排序算法。在每一步中,它选择一个入度为零(没有指向它的边)的顶点,将其添加到输出结果中,并从图中“移除”它(即减少其每个后继节点的入度)。当有多个顶点的入度为零时,可以使用最小堆(得到字典序最小的排序)或 FIFO 队列(得到插入顺序的排序)来打破僵局。Kahn 算法的运行时间为 O(|V| + |E|),同时也可用作环检测器:如果队列为空后仍有顶点的入度 > 0,则说明图中存在环。

Kahn 算法 (伪代码)
Kahn(G):
  Q ← { v ∈ V : indeg(v) = 0 }
  L ← [ ]
  while Q 不为空:
    u ← Q.pop()
    L.append(u)
    for 每一条边 u → v:
      indeg(v) -= 1
      if indeg(v) = 0: Q.push(v)
  if |L| < |V|: 报告存在环
  else: 返回 L

DFS 后序遍历 (Tarjan,1976年)

DFS 算法运行深度优先搜索,每当一个顶点完成搜索(即其所有后继节点都已被完全探索)时,将其压入栈中。最后反转栈中的元素即可得到有效的拓扑排序。环检测非常自然:如果遇到一个仍处于进行中状态(标记为灰色)的顶点,说明发现了一条回边,因此该图不是 DAG。DFS 后序遍历的运行时间同样为 O(|V| + |E|)。

DFS 后序遍历 (伪代码)
DFS-Topo(G):
  for V 中的每个顶点 u: color[u] ← 白色
  L ← 空栈
  for V 中的每个顶点 u:
    if color[u] = 白色: visit(u)
  return reverse(L)

visit(u):
  color[u] ← 灰色
  for 每一条边 u → v:
    if color[v] = 灰色: 报告存在环
    if color[v] = 白色: visit(v)
  color[u] ← 黑色; L.push(u)

并行执行层

DAG 的分层视图将其顶点划分为不同的级别,使得每条边都从较低编号的级别指向较高编号的级别。同一层中的顶点相互独立,因此可以并行执行。层数等于最长路径的长度加一,这被称为 DAG 的关键路径,即即使拥有无限的并行能力,完成所有任务所需的最少顺序轮次。只要输入的是 DAG,此计算器就会自动生成分层视图。

环检测

如果图中包含有向环,则无法进行拓扑排序。我们的计算器会报告具体的环路径(例如 A → B → C → A),并在可视化界面上用红色标出环边。移除环上的任意一条边即可恢复无环状态。

输入格式

边列表

将每条有向边写为 起点 -> 终点,用逗号或换行符分隔。接受的箭头变体:->, , =>, -->, :。你还可以使用链式表达:A -> B -> CA->BB->C 的简写。顶点标签可以是字母、数字、下划线、短横线和点。

A -> B, B -> C, A -> C
C -> D
衬衫 -> 领带 -> 夹克

邻接表

写下每个顶点、一个冒号及其直接后继节点(它指向的顶点)。没有后继节点的顶点仍需占一行,例如 D:

A: B, C
B: D
C: D
D:

如何使用此计算器

  1. 选择格式: 使用单选按钮在边列表和邻接表之间切换。
  2. 输入图数据: 粘贴数据或点击快速示例(穿衣顺序、课程先修、构建目标、含环图等)。
  3. 选择算法: 选择 Kahn 字典序以获得唯一的、可重现的顺序;选择插入顺序以保留输入顺序;选择 DFS 后序遍历以使用经典深度优先方法;或选择“显示全部”并排查看每种排序。
  4. 点击“拓扑排序”: 排序结果、环检测、分层视图、关键路径长度、有效排序总数和交互式图表将显示在下方。
  5. 探索: 点击“播放”观看每个顶点逐步输出。入度徽章会实时更新。拖动任何节点可重新安排布局。

实际应用

构建系统和编译器

make、Bazel、Gradle 和 npm 这样的工具会对它们的构建目标进行拓扑排序,以便每个目标仅在其所有依赖项编译完成后才进行编译。依赖图中的环通常被报告为致命错误——构建系统无法确定从何处开始。

任务调度

项目经理使用 DAG 来记录任务依赖关系。拓扑排序给出了有效的执行顺序,而分层视图给出了无限并行情况下的最少轮次。最长链是决定项目持续时间的关键路径

课程先修计划

大学课程目录是一个 DAG:边表示先修关系。拓扑排序是一个合法的学习计划,而层级则告诉学生每个学期可以并行修读哪些课程。

电子表格重算

当单元格发生变化时,电子表格必须按依赖顺序重新计算每个下游单元格——这是对单元格依赖 DAG 的拓扑排序。循环引用(环)会被应用程序拒绝。

包管理器和插件加载器

Apt、pip、Homebrew、Maven 和无数的插件框架通过对它们的依赖 DAG 进行拓扑排序来解决安装或加载顺序问题。

符号解析和指令调度

编译器使用拓扑排序来对声明进行排序,而 CPU 使用数据依赖 DAG 在重排序缓冲区中调度指令,以避免违反数据冒险。

计算拓扑排序的数量

对于一个包含 n 个顶点的 DAG,不同有效拓扑排序的数量范围从 1(完全排序的链)到 n!(无边的图)。计算精确数量通常是 #P-完全 问题,但对于最多 16 个顶点的图,此计算器使用位掩码动态规划公式进行计算:f(S) = Σ f(S ∪ {v}),其中 v ∉ S 且其所有前驱节点都在 S 中。

复杂度与性能

常见问题

什么是拓扑排序?

有向无环图的拓扑排序是其顶点的一种线性排序,使得对于从 u 到 v 的每一条有向边,u 都排在 v 之前。它代表了在尊重任务依赖关系的前提下处理任务的合法顺序。

此计算器使用哪种算法?

计算器同时运行 Kahn 算法和 DFS 后序遍历。Kahn 算法通过不断移除入度为零的顶点并减少其后继节点的入度来工作。DFS 后序遍历运行深度优先搜索并反转完成顺序。两者的运行时间均为 O(|V| + |E|)。

如果我的图中有环怎么办?

含有有向环的图没有拓扑排序。计算器会检测到环,在可视化中用红色标出,并报告精确的环路径,以便你了解需要移除哪些边才能使图成为 DAG。

什么是字典序最小的拓扑排序?

当存在多种有效的拓扑排序时,通过在每一步始终选择入度为零且按字母顺序最小的顶点,可以获得字典序最小的排序。此计算器默认的 Kahn 模式会返回这种唯一的排序,它稳定且易于重现。

什么是层级或水平视图?

层级视图根据距任何源节点的最长路径长度对顶点进行分组。同一层中的顶点之间没有依赖关系,因此可以并行运行。层数等于最长依赖链加一,代表了完成所有任务所需的最少并行轮次。

一个图可以有多个有效的拓扑排序吗?

是的。如果在 Kahn 算法的任何步骤中有多个入度为零的顶点,则下一步可以选择其中的任何一个。此计算器可以计算包含最多 16 个顶点的图的不同拓扑排序的精确数量。

Kahn 算法和 DFS 后序遍历有什么区别?

Kahn 算法是自顶向下的:它反复选择源节点(入度为 0)并首先输出它们。DFS 后序遍历是自底向上的:它先完成汇节点并将它们置于排序末尾。两者都是 O(|V| + |E|) 并能产生有效的拓扑排序,但通常结果不同。Kahn 算法更易于并行化和适配字典序;DFS 更易于与其他基于 DFS 的分析(如强连通分量)结合。

该工具支持的最大图规模是多少?

该计算器支持最多 80 个顶点和 800 条边。计算有效拓扑排序的总数上限为 16 个顶点,因为该问题是 #P-完全的,且状态空间随 2ⁿ 增长。交互式可视化和算法动画可以在最大支持规模内平滑运行。

延伸阅读

引用此内容、页面或工具为:

"拓扑排序计算器" 于 https://MiniWebtool.com/zh-cn/拓扑排序计算器/,来自 MiniWebtool,https://MiniWebtool.com/

由 miniwebtool 团队开发。更新日期:2026年4月20日

您还可以尝试我们的 AI数学解题器 GPT,通过自然语言问答解决您的数学问题。

进阶数学计算:

常用工具:

随机信用卡生成器MAC地址查找彩票号码生成器凯利公式计算器音频提取器网址提取器太阳、月亮与上升星座计算器 🌞🌙✨英尺英寸转换为厘米SRT转为TXT工具🌡️ 体感温度计算器相对标准偏差计算器CAGR计算器随机扑克牌生成器样本量计算器MAC地址生成器cpm计算器厘米到英尺和英寸转换器百分比折扣计算器百分比计算器音频分割器对数计算器图片打码工具调整视频速度FPS 转换器比例计算器考拉兹猜想计算器🎮 游戏灵敏度转换器HEX计算器VAT计算器毛利率计算器删除换行符太阳位置计算器kg到lbs转换器职位查找器📅 日期计算器随机IMEI生成器定期存款计算器斜边计算器质数检查器t检验计算器血糖转换器One Rep Max (1RM) 计算器Log Base 10 计算器密码强度测试器农历转换器磅转千克转换器移除标点符号在线工具随机字母生成器根式化简器SHA256 哈希生成器椭圆周长计算器卡方检验计算器图片压缩器真心话大冒险生成器罗马数字转换器分数计算器随机装备生成器花样字体生成器随机选择器为图片添加文字因子计算器🖱️ 点击计数器随机化数字Facebook用户ID查询余弦定理计算器英寸到厘米转换器百分比变化计算器年度天数计算器 - 今天是今年的第几天随机字符串生成器合并视频泰勒级数计算器三角函数绘图器新月和满月日历视频转图片提取器DOY日历PSI 转 Bar 转换器十六进制到十进制转换器标准偏差计算器 - 高精度srt时间偏移最简分数计算器误差函数计算器利率计算器圆形面积计算器百分比到ppm转换器相关系数计算器米到英尺转换器利润计算器多项式展开计算器积分计算器高斯分布生成器MD5哈希生成器二项式系数计算器弧长计算器石头剪刀布生成器螺栓扭矩计算器位数计算器变异系数计算器数织生成器-picross颜色代码转换器全格式六西格玛过程能力计算器半衰期计算器圆计算器图片分割器⏱️ 倒计时器十六进制转CMYK转换器填字游戏制作器按字符数换行随机坐标生成器黄金时刻和蓝调时刻计算器Instagram用户ID查询📷 OCR / 图片文字识别SRT合并工具年龄计算器死链检查器百分比增长率计算器翻转视频🔊 音调发生器YouTube频道统计伊斯兰历转换器复合增长率计算器⏱️ 小时计算器月相计算器配色方案生成器🥧 饼图制作工具kpa到psi转换器MAC 地址分析工具📈 折线图制作工具每个月的天数WHOIS查询厘米到英寸转换器循环播放视频指数计算器-高精度条形码生成器视频分割器视频压缩器GIF 转 MP4 转换器原根计算器总和计算器按位计算器💧 露点计算器体脂百分比计算器卧推计算器月亮星座计算器模计算器雷诺数计算器发音音标转换器邻接矩阵计算器Voronoi 图生成器偏导数计算器分贝 (dB) 计算器复数计算器磅到克转换器隐形文本生成器Argon2哈希生成器atan2计算器中点计算器凯撒密码工具删除线文字生成器双重积分计算器图片添加线条快速傅里叶变换FFT计算器斐波纳契数列表景深 (DoF) 计算器杀手数独生成器英尺到米转换器AI Token 计数器Webhook测试器分数简化图片Base64转换器平方根计算器纪念日计算器迷宫生成器阅读时间计算器随机数学题生成器中位数计算器摩尔斯电码生成器日复利计算器期权盈利计算器百分比增加计算器矩形计算器组合计算器获取字符串长度阶乘计算器颜料调色计算器AI标点符号添加器anova计算器Zalgo文本生成器两点间距离计算器年金现值计算器🎰 抽卡保底计算器斜率截距式计算器极坐标方程绘图器样本标准差计算器燃气与电力成本对比美国通货膨胀计算器随机超能力生成器Bar to PSI 转换器Mann-Whitney U 检验计算器亚马逊 FBA 计算器反余弦 (Arccos) 计算器ACFT分数计算器Wilks & DOTS 计算器轮毂偏距计算器轮胎负荷指数与速度等级查询每英里成本计算器租赁买断计算器辛烷值混合计算器二冲程机油混合计算器发动机排量计算器沙发过门计算器木柴考得计算器空气净化器CADR计算器除湿机尺寸计算器吊扇尺寸计算器窗帘尺寸计算器地毯尺寸计算器挂画高度计算器电视安装高度计算器电视尺寸计算器池塘容积和衬垫计算器泳池盐量计算器泳池容积计算器热水器尺寸计算器环氧树脂计算器栏杆立柱间距计算器踢脚线和装饰线条计算器壁板计算器露台木器染色剂计算器草籽计算器草皮计算器沥青计算器立方码计算器天线长度计算器电线管填充率计算器串联并联电容计算器感抗计算器房间照明计算器勒克斯转流明计算器流明转瓦特转换器发电机功率计算器mah到wh转换器三相功率计算器kVA计算器安培转瓦特计算器瓦特转安培计算器串联电阻计算器摩擦力计算器斜面计算器机械效益计算器声速计算器波速计算器浮力计算器终端速度计算器德布罗意波长计算器光子能量计算器emc2计算器时间膨胀计算器开普勒第三定律计算器逃逸速度计算器万有引力计算器比尔-朗伯定律计算器能斯特方程计算器渗透压计算器沸点升高计算器凝固点降低计算器百分比组成计算器当量浓度计算器质量摩尔浓度计算器pKa到Ka转换器亨德森-哈塞尔巴尔赫计算器理论产量计算器限制反应物计算器电子排布计算器交互式元素周期表AI教案生成器AI测验生成器引用生成器 (APA/MLA/Chicago)出勤率计算器AP分数计算器ACT分数计算器SAT分数计算器百分比转CGPA转换器CGPA转百分比转换器简易评分器 EZ Grader养育孩子成本计算器宝宝奶量计算器尿布尺寸计算器婴儿名字生成器宝宝眼睛颜色预测器儿童BMI百分位计算器儿童身高预测器hcg翻倍时间计算器试管婴儿预产期计算器着床计算器中国生男生女预测器ISO 8601 日期格式化工具儒略日转换器小睡计算器日出日落计算器世界时钟日期罗马数字转换器退休倒计时戒瘾天数计算器半岁生日计算器周数计算器小费分配计算器电子邮件营销ROI计算器每条线索成本计算器营运资本计算器youtube收益估算器随机RPG角色生成器