Prim算法的正确性证明

Prim算法的正确性证明

令无向图为 G = ( V , E ) G = ( V, E) G=(V,E),其中 V = { v 1 , v 2 , . . . , v n } V=\left \{ v_{1} ,v_{2},...,v_{n} \right \} V={v1,v2,...,vn},其生成树为 G ′ = ( V , E ′ ) G^{'}=\left ( V,E^{'} \right ) G=(V,E),其中 E ′ = { e t 1 , e t 2 , . . . , e t n − 1 } E^{'}=\left \{e _{t_{1}},e _{t_{2}},...,e _{t_{n-1}} \right \} E={et1,et2,...,etn1},且 G ′ G^{'} G为联通无环图。

1. 贪心选择性质

不失一般性,令起始节点为 v 1 v_1 v1,贪心选择测略就是找到与 v 1 v_1 v1连接边最短的节点,以及相应的边,记该点为 v a v_a va,相应的边为 e b = ( v 1 , v a ) e_b=(v_1, v_a) eb=(v1,va)。现证明包括在某个最优解中。

G ′ G^{'} G为一棵最小生成树,其中不包括 e b e_b eb,则将 e b e_b eb加入中,形成一个环,不考虑该环之外的节点,每个节点的度刚好为2,令该环中与 v 1 v_1 v1相关的另一条边为 e c e_c ec,则删除后,获得另外一棵生成树 G ′ ′ G^{''} G′′。由于 w ( e b ) < = w ( e c ) w(e_b) <= w(e_c) w(eb)<=w(ec), G ′ ′ G^{''} G′′也一定为一棵最小生成树。

2. 最优子结构

不失一般性,令通过prim算法得到的某棵最小生成树 G G G中,节点度数最小的两个节点对应的字符为 a a a b b b,将两个节点进行合并操作得到一个新的节点,对应字符记为 c c c,同时新的最小生成树为 G 1 G_1 G1,需要证明 G 1 G_1 G1为最小生成树。

假设其最小生成树不是 G 1 G_1 G1,则另外一棵最小生成树 G 2 G_2 G2, s.t. W ( G 2 ) < W ( G 1 ) W(G_2) < W(G_1) W(G2)<W(G1),将的 c c c节点重新扩展成为 a a a b b b两个节点,且以边 e = ( a , b ) e = (a, b) e=(a,b)相连,易得此使最小生成树无环,且是一个有 n − 1 n-1 n1条边的连通图,获得 G 3 G_3 G3,可以得到: G 3 = G 2 + w ( e ) < G 1 + w ( e ) = G G_3 = G_2 + w(e) < G_1 + w(e) = G G3=G2+w(e)<G1+w(e)=G

这与假设中的G为最小生成树的假设矛盾,因此得证。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

娃娃酱斯密酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值