简化您的工作流程:搜索 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地址查找随机信用卡生成器彩票号码生成器凯利公式计算器网址提取器相对标准偏差计算器英尺英寸转换为厘米CAGR计算器太阳、月亮与上升星座计算器 🌞🌙✨cpm计算器厘米到英尺和英寸转换器🌡️ 体感温度计算器定期存款计算器MAC地址生成器样本量计算器比例计算器VAT计算器SRT转为TXT工具调整视频速度百分比折扣计算器毛利率计算器质数检查器随机选择器音频分割器分数计算器音频提取器HEX计算器百分比增长率计算器随机字符串生成器图片打码工具srt时间偏移🎮 游戏灵敏度转换器斜边计算器FPS 转换器血糖转换器kg到lbs转换器t检验计算器随机扑克牌生成器📅 日期计算器随机扑克手牌生成器高斯分布生成器卡方检验计算器wpa密钥生成器年龄计算器随机IMEI生成器随机化数字为图片添加文字对数计算器真心话大冒险生成器视频转图片提取器SHA256 哈希生成器百分比变化计算器随机英文句子生成器Facebook用户ID查询三角函数绘图器MAC 地址分析工具罗马数字转换器圆计算器SRT合并工具两点间距离计算器随机超能力生成器合并视频百分比减少计算器kpa到psi转换器体脂百分比计算器农历转换器圆形面积计算器One Rep Max (1RM) 计算器年度天数计算器 - 今天是今年的第几天DOY日历椭圆周长计算器💧 露点计算器太阳位置计算器直方图生成器利润计算器根式化简器随机虚假地址生成器随机颜色生成器Log Base 10 计算器足球 xG预期进球计算器花样字体生成器磅转千克转换器指数计算器-高精度误差函数计算器原根计算器标准偏差计算器 - 高精度迷宫生成器亚马逊 FBA 计算器职位查找器英寸到厘米转换器颜料调色计算器变异系数计算器图片压缩器🎲 掉落概率计算器MD5哈希生成器圆柱体体积计算器 高精度随机RPG角色生成器偏导数计算器先付年金现值计算器八进制计算器YouTube缩略图下载器为视频添加水印斐波那契数检查器泰勒级数计算器英尺到米转换器多项式展开计算器月亮星座计算器死链检查器百分比增加计算器🔊 音调发生器分贝 (dB) 计算器名人名言搜索 (英文)图片分割器相关系数计算器视频分割器逻辑门模拟器随机英文单词生成器YouTube频道统计伊斯兰历转换器PER计算器最简分数计算器楼梯计算器雷诺数计算器PSI 转 Bar 转换器不可见字符移除器删除空格投注赔率转换器按位计算器百分比到ppm转换器百分比计算器黄金时刻和蓝调时刻计算器HEX转换器Instagram用户ID查询位数计算器📈 折线图制作工具朱利亚集合生成器真实命中率计算器Voronoi 图生成器万花尺图案生成器方向场斜率场绘图器沸点计算器🖱️ 点击计数器燃气与电力成本对比科学记数法计算器组合计算器翻转视频获取字符串长度角度转换器质数分解计算器退休倒计时随机生日生成器黄金分割计算器克到磅转换器发音音标转换器快速傅里叶变换FFT计算器极坐标方程绘图器水星逆行日历身高百分位数计算器随机整数生成器隐形文本生成器AI Token 计数器IPv4/IPv6到十六进制转换器TikTok收益计算器利率计算器半衰期计算器条形码生成器磅到克转换器积分计算器配方法计算器配色方案生成器随机小数生成器AI标点符号添加器atan2计算器厘米到英寸转换器图片添加线条平方根计算器视频压缩器⚔️ DPS计算器ppm到百分比转换器Webhook测试器互补误差函数计算器弧长计算器数字提取器有效命中率计算器比例置信区间计算器直线方程计算器米到英尺转换器英国印花税计算器谐振频率计算器锥体表面积计算器 高精度ASCII码表Delaunay 三角剖分生成器F检验/F分布计算器二进制计算器体型计算器十进制到十六进制转换器字符计数器工资转换计算器年金现值计算器循环播放视频试管婴儿预产期计算器着床计算器中国生男生女预测器ISO 8601 日期格式化工具儒略日转换器小睡计算器月相计算器日出日落计算器世界时钟日期罗马数字转换器戒瘾天数计算器半岁生日计算器纪念日计算器周数计算器小费分配计算器电子邮件营销ROI计算器每条线索成本计算器营运资本计算器边际贡献计算器FIFO / LIFO 计算器安全库存计算器再订货点计算器经济订货量eoq计算器折旧计算器手工艺品定价计算器批发价格计算器Shopify 利润计算器eBay费用计算器Etsy费用计算器Stripe 手续费计算器PayPal手续费计算器十一奉献计算器天课计算器HRA免税计算器服务酬金计算器NPS计算器EPF计算器PPF计算器RD计算器SWP计算器税前工资倒推计算器贷款比较计算器信用使用率计算器CD阶梯计算器美国国库券T-Bill计算器I 系列储蓄债券计算器529大学储蓄计算器HSA计算器遣散费计算器加薪计算器发票生成器出差津贴计算器里程报销计算器房租涨幅计算器按比例租金计算器房租承受能力计算器汽车落地价计算器购车预算计算器摩托车贷款计算器房车贷款计算器船舶贷款计算器土地贷款计算器建筑贷款计算器只付利息抵押贷款计算器气球贷计算器房贷点数计算器PMI计算器双周房贷还款计算器ARM浮动利率房贷计算器VA贷款计算器实发工资计算器AI SQL 查询生成器AI正则表达式生成器AI 数据可视化工具 (粘贴 CSV)AI文本语气分析器AI简历分析器AI单位转换器自然语言AI道歉信生成器AI礼貌借口生成器AI旅行行程生成器AI阅读清单生成器AI健身计划生成器AI膳食计划生成器AI礼物点子生成器ai食谱生成器根据现有食材奖学金投资回报率计算器大学费用计算器语言学习流利度小时数计算器词汇测验生成器康奈尔笔记生成器学习曲线计算器抽认卡间隔重复调度器瓷砖填缝剂计算器洗碗机装载优化器洗涤剂用量计算器染发剂调配计算器打印成本计算器礼品卡小费计算器搬家纸箱数量计算器储物单元尺寸计算器胶囊衣橱搭配计算器皮带长度计算器液压缸推力计算器滑轮组计算器齿轮比计算器机械比热容计算器热膨胀计算器热传递计算器伯努利方程计算器潮汐时间计算器星空可见度计算器绳结打法参考工具睡袋温度评级指南帐篷地布尺寸计算器背包旅行食物重量计算器奈史密斯徒步配速计算器刺绣线长度计算器树脂浇注用量计算器串珠图案计算器陶土收缩率计算器折纸纸张尺寸计算器被子滚边计算器十字绣绣线计算器针织图案计算器编织针尺寸转换器钩针尺寸转换器马匹干草计算器宠物航空旅行航空箱尺寸查询器爬虫栖息地UVB计算器鸟笼尺寸计算器鱼缸加热棒瓦数计算器猫砂盆数量计算器前照灯光束距离计算器发动机压缩比计算器轮胎花纹磨损计算器挂车舌重计算器车辆重量分布计算器旅行费用分摊计算器刹车距离计算器工伤赔偿计算器遗嘱资产分配计算器商标分类查询工具专利申请费计算器销售税关联检查器刑期减免计算器诉讼时效计算器Airbnb 定价优化器室友房租分摊计算器Section 8 租金计算器BRRRR 方法计算器现金对现金回报率计算器租金收益率计算器1031 交换计算器财富增长可视化工具午餐花费计算器健身房 vs 家庭健身花费计算器咖啡花费计算器远程办公省钱计算器副业ROI计算器订阅费用追踪器SaaS定价计算器自由职业项目报价计算器烟熏木材搭配指南发酵时间计算器腌制时间计算器饮食限制食谱筛选器香料替代查找器咖啡因半衰期追踪器标准杯计算器葡萄酒搭配建议器攀岩难度等级转换器自行车齿轮比计算器钓鱼结强度计算器瑜伽体式保持计时器游泳SWOLF计算器跑步成绩预测计算器拳击出拳力量计算器橄榄球得分计算器板球得分率计算器网球计分器Wells评分计算器 (DVT/PE)格拉斯哥昏迷评分计算器阿普加评分计算器FFMI计算器库珀12分钟跑步计算器一英里步行测试Rockport计算器瘦体重力量计算器碳水化合物胰岛素比例计算器胰岛素敏感系数计算器希伯来历转换器跨文化年龄计算器多久以前计算器还有多久倒计时计算器日期模式生成器中间日期计算器日期添加工作日工作日计算器词频分析器句子长度方差分析器海明威风格可读性编辑器维吉尼亚密码工具埃特巴什密码工具ROT13编码解码器EXIF数据查看与移除工具猪拉丁文翻译器倒推首字母缩写生成器首字母缩写生成器全字母句检查器漏字文检测器图像转SVG描摹器图片转 ASCII 艺术转换器JSON Schema 生成器TypeScript 在线演练场Less 到 CSS 编译器SCSS转CSS编译器SVG 转 React/JSX 转换器查询字符串生成器URL解析器UUID验证和解码器HTTP状态码参考cURL命令构建器谢尔宾斯基三角形生成器3D曲面绘图器曼德博集合探索器L-System分形生成器镶嵌图案生成器六西格玛过程能力计算器youtube收益估算器