形式陈述
设 G = ( V , E ) 为非空、连通的有限简单无向图,另给边权函数 理路 函数 Function · Map · Mapping 由定义域、陪域和单值图共同组成,并把每个输入送到唯一输出的映射。 w : E → R ,取值于实数系 理路 实数系 Real number system · Ordered complete field 满足序域公理与上确界完备性的数系。 。最小生成树(MST)是在全部生成树 理路 生成树 Spanning tree 包含原图全部顶点且自身为树的子图。 中使
w ( T ) = ∑ e ∈ T w ( e ) 最小者。有限连通图至少有一棵生成树,候选数量有限,所以即使含负权边也总能达到最小值。
若输入以独立边 ID 保存平行边或自环,可先删去自环,再对每个无序端点对保留一条最小权代表边,并保存其原边 ID;平局按固定规则任选其一。所得简单图与原图具有相同连通分量。原图的任一生成树不含自环,也不同时包含同端点的两条平行边;把它的各边换成代表边,仍是同一端点结构的树,权重不增。反过来,简单图的生成树按保存的 ID 提升回原图,权重完全相同。因此两个问题的最优值相等,约化问题的一棵 MST 给出原问题的一棵 MST;这一适配不承诺枚举原图的全部最优树。
设原输入显式列出 n ≥ 1 个已编号顶点和 m 条边记录,端点与权重比较按单位成本计费。按无序端点对比较排序、逐组选择最轻边,可在 O ( n + m log ( m + 1 ) ) 时间和 O ( n + m ) 存储内完成上述适配;它是求解前的额外成本。支持原边记录的 Prim、Kruskal 等实现也可直接忽略自环并逐条处理平行边,此时各自复杂度中的 m 按原记录数计费。单顶点输入约化后没有边,返回带原顶点的空树。
MST 贪心证明围绕两条交换性质展开。若边集 F 是某棵 MST 的子集,一个割 ( S , V ∖ S ) 尊重 F ,即没有 F 中的边跨割,那么该割上的任意最轻边 e 都是安全的:取一棵包含 F 的 MST T ;若 e ∉ T ,加入 e 形成唯一圈,圈上另有一条跨割边 f 。由 w ( e ) ≤ w ( f ) ,以 e 换掉 f 不增加总权,并仍包含 F 。
对任意圈,若边 e 是圈中严格 最重边,则 e 不属于任何 MST。否则从含 e 的生成树删去 e 会产生一个割,圈上还有一条更轻边跨割,替换后得到更轻生成树。若最重权并列,只能保证存在某棵 MST 不取指定的并列边,不能断言所有 MST 都排除它。
Prim 算法 理路 Prim 算法 Prim's algorithm 从一个顶点开始反复加入跨越当前割的最轻边的最小生成树算法。 维护一棵树并反复取跨当前割的轻边;Kruskal 算法 理路 Kruskal 算法 Kruskal's algorithm 按边权递增加入不成环边并用并查集维护连通分量的最小生成树算法。 按全局边序合并森林;Borůvka 算法 理路 Borůvka 算法 Boruvka algorithm 每轮为每个连通分量并行选择最轻出边并收缩,构造最小生成森林。 让每个分量同时选最轻出边。三者实现同一问题,但中间状态与复杂度模型不同。
直觉
生成树从原图删除所有环,却保留全部顶点之间的连通性;MST 再在这些骨架中比较边权总和。割性质从“任何连接方案都必须跨过这道边界”寻找可加入边,环性质从“圈上总有一条边可以删”寻找可排除边。两者是同一个交换动作的正反视角。
贪心过程应保持的是“已选森林能够扩充成某棵 MST”,而不仅是“现在没有环”。许多没有环的边集已经选入过贵边,无法完成为最优树。尊重当前森林的割保证交换时不会删掉已承诺保留的边;因此每一步都保留至少一个最优完成方案,最后选满 | V | − 1 条边时便已经是其中之一。
目标函数只把所选边各计一次,不关心某条边会出现在多少对顶点的树路径中。因此一棵总造价最小的网络骨架,未必给任何指定根提供最短路线,也不自动具有冗余或容错能力。
图片加载失败 最小生成树割性质示意图
例子与边界
三角形的边权为 1 , 2 , 4 时,取权 1 , 2 两边得到总权 3 ;权 4 的边在唯一圈中严格最重,不可能进入 MST。若三条边都为 1 ,删去任意一条都得到总权 2 的 MST,说明平局会造成多解。所有边权互异时 MST 唯一;反命题不成立,含相等权边的图也可能因结构限制只有一棵 MST。
全局排序为何还要检查分量
设四个顶点的边为 a b : 1 , b c : 2 , a c : 3 , c d : 4 , b d : 5 。Kruskal 算法 理路 Kruskal 算法 Kruskal's algorithm 按边权递增加入不成环边并用并查集维护连通分量的最小生成树算法。 先选 a b , b c ,此时森林分量为 { a , b , c } 与 { d } ;权重 3 的 a c 虽是下一条最便宜的边,却连接同一分量,必须跳过。随后选 c d ,得到总权 7 的树。排序负责寻找便宜候选,分量检查负责保证候选跨越尊重当前森林的割,两个步骤缺一不可。
在比较与并查集操作的常用模型下,排序花费 O ( m log ( m + 1 ) ) ,分量查询与合并的总摊还成本为 O ( m α ( n ) ) 。n ≥ 2 时,对于简单连通图可将主界写成 O ( m log n ) ;若允许任意多条平行边,应保留 m 或说明预处理,不能无条件利用 m ≤ n 2 。
负权边不会导致无界下降,因为任何生成树固定只含 | V | − 1 条边;贪心证明也只比较边权。平行边应作为独立候选,较重的同端点平行边构成长度为二的多重图圈并可排除;自环不可能属于生成树。若基础文件格式只表示简单图,应在读入时明确合并平行边或保留边 ID,不能默默覆盖。
单顶点图的 MST 是空边集,权重为零;零顶点图按生成树条目的约定只输出空生成森林。图不连通时不存在覆盖全部顶点的生成树。对每个连通分量分别最小化,得到最小生成森林;若有 c 个分量,森林含 | V | − c 条边。有向图的对应问题需要指定根与入弧方向,称为最小树形图,并不由无向割性质直接解决。
MST 与最短路 理路 最短路问题 Shortest-path problem 在有限有向实权图中寻找源点到各顶点的最小有向游走成本。 在非负权图上仍可不同。若 w ( s a ) = 2 , w ( a b ) = 2 , w ( s b ) = 3 ,MST 取 s a , a b ,总权 4 ;从 s 出发却会沿直边 s b 以成本 3 到达 b ,而 MST 中的路线成本为 4 。相应的最短路树取 s a , s b ,总权 5 。
推论与应用
在网络布线中,边权可表示铺设一段链路的成本,MST 给出无冗余连通骨架;若系统还要求故障容错,就要增加边连通约束,MST 本身不够。单链接聚类按边权从小到大合并分量,截断 Kruskal 过程可得到指定簇数;这一解释依赖权重是可比较的不相似度。
任意 MST 也是最小瓶颈生成树:若有另一棵树的最大边更轻,可在 MST 最大边诱导的割上找到更轻替换边,矛盾;最小瓶颈树反过来未必最小化总权。边权更新后,删除一条树边需要在新割上寻找替代边,动态 MSF 理路 动态最小生成森林 Dynamic minimum spanning forest · Dynamic MSF · Fully dynamic MST 在无向带权图的边插入与删除之间持续维护每个连通分量的最小生成树,并以最轻跨割替代边恢复最优森林。 因此是另一个带更新接口的问题,静态交换性质只提供正确性工具,不给出更新时间界。
参考资料
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Ch. 21, minimum spanning trees and cut property。
Jon Kleinberg and Éva Tardos, Algorithm Design , Pearson, 2005,§§4.5–4.6。
Robert Sedgewick、Kevin Wayne,Algorithms ,4th ed.,2011,§4.3 Minimum Spanning Trees :割交换、Kruskal 分量检查与边权平局。