最小生成树计算器
使用 Kruskal 或 Prim 算法计算加权图的最小生成树 (MST)。具有交互式图形可视化、算法步骤追踪和边选择动画功能。
检测到广告拦截,导致我们无法展示广告
MiniWebtool 依靠广告收入免费提供服务。如果这个工具帮到了你,欢迎开通 Premium(无广告 + 更快),或将 MiniWebtool.com 加入白名单后刷新页面。
- 或升级 Premium(无广告)
- 允许 MiniWebtool.com 显示广告,然后刷新
最小生成树计算器
欢迎使用最小生成树计算器,这是一个用于使用 Kruskal 或 Prim 算法计算带权图 MST 的交互式工具。无论您是在学习图论、设计网络基础设施,还是在优化资源分配,此计算器都能为您提供组合优化中这两个基础算法的可视化分步探索。
什么是最小生成树 (MST)?
一个连通、无向、带权图的最小生成树是一个满足以下条件的边子集:
- 连接所有顶点(生成)
- 不包含回路(树)
- 总边权重尽可能小
对于具有 V 个顶点的图,MST 始终恰好有 V - 1 条边。如果图是非连通的,结果将是最小生成森林——即每个连通分量的 MST 集合。
Kruskal 算法
Kruskal 算法是一种基于边的贪心算法,它通过按权重递增的顺序处理边来构建 MST。它使用并查集 (Union-Find) 数据结构来高效地检测回路。
Kruskal 算法伪代码
MST ← 空集
按权重对所有边进行排序(升序)
为所有顶点初始化并查集
for each 边 (u, v, w) in 已排序的边:
if Find(u) ≠ Find(v): // 属于不同分量
MST ← MST ∪ {(u, v, w)}
Union(u, v) // 合并分量
return MST
Prim 算法
Prim 算法是一种基于顶点的贪心算法,从一个起始顶点开始生长 MST。在每一步中,它都会添加连接树内顶点与树外顶点的最便宜的边。
Prim 算法伪代码
MST ← 空集
inMST ← {start}
PQ ← 包含从 start 出发的边的优先队列
while PQ 不为空 and |inMST| < |V|:
(w, u, v) ← 从 PQ 中提取最小值
if v ∉ inMST:
MST ← MST ∪ {(u, v, w)}
inMST ← inMST ∪ {v}
将从 v 出发的所有边加入 PQ
return MST
Kruskal vs Prim:何时使用哪种算法?
| 特性 | Kruskal 算法 | Prim 算法 |
|---|---|---|
| 方法 | 基于边(全局排序) | 基于顶点(局部生长) |
| 数据结构 | 并查集 (Union-Find) | 优先队列 |
| 时间复杂度 | \( O(E \log E) \) | \( O((V + E) \log V) \) |
| 最适合 | 稀疏图 | 稠密图 |
| 非连通图 | 生成生成森林 | 仅生成包含起始节点的分量树 |
| 可并行性 | 更容易并行化 | 本质上是顺序执行的 |
如何使用此计算器
- 定义图的边: 按
节点1, 节点2, 权重的格式输入边,每行一条。MST 运行于无向图,因此每条边在两个方向上都有效。 - 选择算法: 对于稀疏图选择 Kruskal,对于稠密图选择 Prim。两者都能生成最优 MST。
- 设置起始节点(仅限 Prim): 可选地指定 Prim 算法开始的位置。这会影响边选择的顺序,但不会改变 MST 的总权重。
- 计算 MST: 点击“查找 MST”运行算法。探索交互式可视化、边列表和分步追踪。
- 查看步骤: 使用“下一步/上一步”按钮查看算法的分步执行过程,画布上会实时高亮显示。
理解结果
MST 边列表
显示被选入 MST 的每一条边,按添加顺序排列,同时列出单条边的权重和 MST 总权重。
图形可视化
交互式画布使用不同颜色显示您的图:
- 绿色节点和边 = MST 的一部分
- 橙色高亮 = 当前正在检查的元素
- 灰色元素 = 尚未加入 MST 的部分
分步追踪
显示算法的每一个决策:检查了哪条边、是被接受还是被拒绝(及其原因),以及 MST 构建的当前状态。
MST 的实际应用
网络设计
最经典的应用。当需要以最小的总电缆、光纤或管道长度连接各个节点(城市、服务器、电气设备)时,MST 提供了最优解。电信公司使用基于 MST 的算法来最小化基础设施成本。
聚类分析
在机器学习和数据科学中,基于 MST 的聚类(如单链接聚类)通过从 MST 中移除最长的边来对数据点进行分组。这可以产生自然的簇,而无需预先指定组数。
图像分割
计算机视觉算法使用 MST 将图像分割成有意义的区域。像素作为节点,边权重代表颜色/强度的差异,切割 MST 边可以分离出不同的物体。
近似算法
MST 为度量旅行商问题 (TSP) 提供了 2-近似解。MST 权重是最优 TSP 路径的下界,将 MST 边加倍可得到一个在最优解 2 倍范围内的路径。
电路设计
超大规模集成电路 (VLSI) 设计使用 MST(通过 Steiner 树变体)来最小化电路板上连接组件的总导线长度,从而减少信号延迟和制造成本。
MST 的关键性质
- 割性质 (Cut Property): 对于图的任何割,横跨该割的最小权重边一定在 MST 中。
- 回路性质 (Cycle Property): 对于图中的任何回路,该回路中权重最大的边一定不在 MST 中(假设权重唯一)。
- 唯一性: 如果所有边权重都是唯一的,则 MST 是唯一的。如果存在重复权重,可能存在多个具有相同总权重的有效 MST。
- 子图: MST 是一个具有 V-1 条边且无回路的子图。
常见问题解答
什么是最小生成树 (MST)?
最小生成树是一个连通、无向、带权图的边子集,它在不形成任何回路的情况下将所有顶点连接在一起,且总边权重最小。对于具有 V 个顶点的图,MST 恰好有 V-1 条边。
Kruskal 算法和 Prim 算法有什么区别?
Kruskal 算法是基于边的:它按权重对所有边进行排序,并贪心地添加不会产生回路的边,使用并查集数据结构。Prim 算法是基于顶点的:它从一个起始节点开始生长 MST,始终添加连接树与新顶点的最便宜的边,使用优先队列。两者都会产生最优 MST,但边的选择顺序可能不同。
什么时候应该使用 Kruskal 算法或 Prim 算法?
Kruskal 算法通常更适用于稀疏图(边数相对于节点数较少),时间复杂度为 O(E log E)。Prim 算法更适用于稠密图,使用二叉堆时时间复杂度为 O(E log V)。对于极稠密的图,使用斐波那契堆的 Prim 算法可达到 O(E + V log V)。
一个图可以有多个有效的 MST 吗?
是的,如果图中存在权重相等的边,则可能存在多个有效的 MST。不同的 MST 总权重相同,但包含的边可能不同。Kruskal 和 Prim 算法对同一个图可能产生不同的 MST,但它们的最小总权重必定一致。
MST 有哪些实际应用?
MST 用于网络设计(最小化电缆/光纤长度)、电路板布局、聚类分析、图像分割、分类学构建、近似处理旅行商问题 (TSP) 等 NP 难问题,以及以最低成本建设道路/管道/供电网络。
MST 适用于非连通图吗?
真正的 MST 要求图是连通的。如果图是非连通的,算法将生成最小生成森林——即每个连通分量的 MST 集合。此计算器会在图未完全连通时发出提示。
更多资源
引用此内容、页面或工具为:
"最小生成树计算器" 于 https://MiniWebtool.com/zh-cn//,来自 MiniWebtool,https://MiniWebtool.com/
由 miniwebtool 团队开发。更新日期:2026年2月19日
您还可以尝试我们的 AI数学解题器 GPT,通过自然语言问答解决您的数学问题。