算法札记:Kruskal 和 Prim 算法的正确性
2026/6/19 2:40:33 网站建设 项目流程

Kruskal 和 Prim 算法的正确性均基于‌最小生成树(MST)的切割性质‌:对于图的任意切割(将顶点分为两个不相交集合),横跨切割且权值最小的边(轻量级边)一定属于某棵最小生成树。‌‌

核心证明逻辑:切割性质

设 G=(V,E) 为连通加权无向图,A 是包含在某棵 MST 中的边子集。若 (S,V−S) 是尊重 AA 的任意切割(即 A 中无边横跨该切割),且 (u,v) 是横跨该切割的一条轻量级边,则 (u,v)(u,v) 对 AA 是‌安全‌的(即A∪{(u,v)} 仍包含在某棵 MST 中)。‌‌

证明思路(反证法)‌:

  1. 假设存在一棵包含 A 的 MST, T 不包含 (u,v)。
  2. 将 (u,v) 加入 T,必形成环。该环中必存在另一条横跨切割 (S,V−S) 的边 (x,y)(因为 u,v 分属切割两侧)。
  3. 由于 (u,v) 是轻量级边,故 w(u,v)≤w(x,y)。
  4. 构造新树 T′=T−{(x,y)}∪{(u,v)},其总权值w(T′)=w(T)−w(x,y)+w(u,v)≤w(T)。
  5. 因 T 已是 MST,故 w(T′)=w(T),即 T′ 也是 MST 且包含 (u,v)。矛盾得证。‌‌

Prim 算法正确性证明

Prim 算法每次从已选顶点集 S 到未选顶点集 V−S 的横跨边中选取权值最小的边。

  • 贪心选择‌:每一步选择的边 (u,v) 恰好是切割 (S,V−S) 下的轻量级边。
  • 归纳维持‌:初始时 S={v0​},边集 A=∅ 显然尊重切割。每步加入安全边后,AA 仍包含在某 MST 中,且 S 扩大。
  • 终止‌:当 S=V 时,A 包含 n−1 条边且无环,构成 MST。‌‌

Kruskal 算法正确性证明

Kruskal 算法按权值递增顺序遍历边,若边连接两个不同连通分量则加入。

  • 连通分量即切割‌:算法维护的森林中,每条候选边 (u,v) 连接两个不同树(连通分量 Cu,Cv​)。此时切割(Cu​,V−Cu​) 尊重当前边集 A。
  • 轻量级保证‌:由于边按权值排序,(u,v) 是连接 Cu​ 与其他分量的所有边中权值最小的(否则更小的边已被处理并合并了分量)。
  • 安全加入‌:根据切割性质,(u,v) 是安全边。重复此过程直至所有点连通,所得即为 MST。‌‌

两种算法本质都是‌贪心策略‌在 MST 问题上的应用,通过确保每一步加入的边都是“安全”的,从而保证全局最优。‌‌

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询