跳过并跳转到主要内容
BigO

算法理论基础

最小生成树两大理论基础:1. 切分性质:任意割的权值最小割边,必属于某棵最小生成树,是 Prim 算法的依据。2. 环性质:任意环中权值最大的边,一定不在最小生成树里,支撑 Kruskal 算法。连通加权无向图才存在最小生成树,总权值和唯一,可有多棵不同最小生成树。

最小生成树问题1分钟阅读

最小生成树(MST)之所以能够使用 Prim 或 Kruskal 这样直观的贪心算法求解,并且保证最终结果一定是全局最优解,其核心建立在图论中严格的割(Cut)与环(Cycle)性质之上。

理解 MST 理论基础的前提是掌握以下两个概念:

  1. 割(Cut):指将图的顶点集 VV 划分为两个互不相交的非空子集 (S,V−S)(S, V - S) 的一种划分。
  2. 横跨边(Cross Edge):如果一条边 (u,v)(u, v) 的一个端点 u∈Su \in S,另一个端点 v∈(V−S)v \in (V - S),则称该边为横跨割 (S,V−S)(S, V - S) 的横跨边。

所有求解 MST 的贪心算法,其正确性均可由以下三大定理推导证明:

  • 内容:对于无向图中的任意一个割 (S,V−S)(S, V - S),如果边 ee 是所有横跨该割的横跨边中权值最小的一条(即轻量边/Light Edge),那么边 ee 一定属于图的某棵最小生成树。如果图中所有边权值均互不相同,则边 ee 必定存在于唯一的最小生成树中。
  • 理论意义:Prim 算法的直接数学依据。Prim 算法每次将已选节点集合作为 SS,未选节点集合作为 V−SV - S,贪心选择连接两集合的最短边,就是利用了切分定理。

  • 内容:在无向图的任意一个简单环(Cycle)中,权值最大的那条边绝不可能属于该图的任何一棵最小生成树。
  • 理论意义:Kruskal 算法判环与避环的直接依据。如果一条边与已选择的边构成了环,且它是环上最大的边,就可以安全地舍弃。

  • 最优子结构:最小生成树问题具备最优子结构。若将 MST 中的任意一条边 e=(u,v)e = (u, v) 切断,生成树会被分为两棵子树 T1T_1 和 T2T_2。则 T1T_1 必是对应子图的最小生成树,T2T_2 也必是对应子图的最小生成树。
  • 算法统一性:无论是“按点生长”(Prim)还是“按边合并”(Kruskal),都是在维持无环特性的前提下,不断利用割性质选择安全边(Safe Edge)加入集合,直到选满 n−1n-1 条边。

为直观展示其严密性,这里用反证法(替换法)对切分定理进行简要证明:

证明目标:横跨割 (S,V−S)(S, V-S) 的最小横跨边 e=(u,v)e = (u, v) 必定属于某棵最小生成树 TT。

  1. 假设:假设不存在包含边 ee 的最小生成树。现有一棵不包含边 ee 的最小生成树 T′T'。
  2. 构环:将边 ee 加入到 T′T' 中。由于 T′T' 是树,加入边 ee 后必定会产生一个包含 ee 的简单环 CC。
  3. 找替换边:因为 ee 跨越了割 (S,V−S)(S, V - S),而环 CC 是闭合的,所以环上必有另一条边 e′=(u′,v′)e' = (u', v') 同样跨越了割 (S,V−S)(S, V - S)。
  4. 替换构造:我们将 e′e' 从树中删去,用 ee 替代它,得到一个新的生成树 T′′=T′−{e′}+{e}T'' = T' - \{e'\} + \{e\}。
  5. 推导矛盾:
    • 新生成树的总权值为:w(T′′)=w(T′)−w(e′)+w(e)w(T'') = w(T') - w(e') + w(e)。
    • 因为 ee 是横跨该割的最小边,所以 w(e)≤w(e′)w(e) \le w(e')。
    • 这意味着 w(T′′)≤w(T′)w(T'') \le w(T')。
    • 如果 w(e)<w(e′)w(e) < w(e'),则 w(T′′)<w(T′)w(T'') < w(T'),这与 T′T' 是最小生成树相矛盾!
    • 如果 w(e)=w(e′)w(e) = w(e'),则 w(T′′)=w(T′)w(T'') = w(T'),说明存在包含 ee 的最小生成树 T′′T''。

结论:假设不成立,最小横跨边 ee 必定可以属于某棵最小生成树。

  • 充分条件:如果无向连通图中的所有边的权值均互不相同,则该图的最小生成树是唯一的。
  • 存在多解的情况:当图中存在多条权值相同的边时,在割或环的选择中可能会产生等价替换,从而导致该图可能存在多棵不同的最小生成树,但所有最小生成树的边权总和必然完全相等。

© 2026 三七开 · 一方通行,只管向前。

旅途由 Astro 驱动 · 主题 Chirping Astro