最小生成树算法Prim与Kruskal的证明

最小生成树算法Prim与Kruskal的证明

虽然我觉着除了数学系的,应该没人执着于证明定理,不过如果会证明一个定理,那么它的原理和使用就不言自明了,比记那该死的步骤好多了。

首先,有推论1:如果一个图中<u,v>是权值最小的边(假定唯一),那么所有的最小生成树必定包括这条边

假设这个权值最小的边只有一条,如果它有多条,只能说一定会存在一个包括它的最小生成树。

该推论证明:

请添加图片描述

如图所示,(V1,V3)是图1中权值最小的边,除去顶点V3,及其相关边,得图2。
请添加图片描述

易证图1的最小生成树,一定是图2的最小生成树连上V3所得。
任意给定一个图2的最小生成树,如何要得到图1的最小生成树呢?
(图画的不对,这个不是图2的最小生成树,不影响证明,有时间再改吧)
请添加图片描述

(Vi,V3)选一个权值最小的连上就行,而(V1,V3)是图1中权值最小的边,一定也是(Vi,V3)中权值最小的边。故图1的最小生成树一定包含权值最小的边(V1,V3)(假定唯一),证明完毕

Prim证明

从推论1的证明中,其实可以看出来一个推论2:对于顶点V3,最小生成树中一定包含 以顶点V3为端点的边中权值最小的那条边(同样的假定权值最小的边唯一)。

step1:如果从V1出发,以顶点V1为端点的边中权值最小的那条边是(V1,V3),可以确定最小生成树中一定包括(V1,V3)

请添加图片描述

step2:然后,把V1和V3捏合成一个顶点V看待,这对寻找最小生成树是没有影响的
请添加图片描述

step3:所以,问题又回到了从V出发,构造最小生成树,也就是转Step1,直到最后只剩一个顶点,最小生成树构造完毕。

Kruskal证明

Prim是以点为核心,从一个顶点出发,层层简化,那么Kruskal就是以边为核心,层层简化。
Step1:由推论1,图1所有边中权值最小边为(V1,V3),所以图1的最小生成树一定包含边(V1,V3)

请添加图片描述
Step2:捏合顶点V1,V3,

请添加图片描述

Step3:问题又回到了Step1的情况,继续寻找最小权值边,捏合顶点直到只剩一个顶点为止。

注意

其实从证明过程也很容易发现,当权值最小边有多条时往往选哪条都可以。
比如下图, Kruskal证明,(V,V4)有两条权值最小边5,它们在顶点捏合前并非同一条边,但显然可以看出来,哪条都不影响捏合顶点V,V4。(V,V2)的权值最小边也是如此。反正这只意味V,V2,V4应该捏合在一起。
如果从Prim证明来看也是一样的。
所以说这两种算法可以得到最小生成树,但得到的最小生成树未必唯一。
请添加图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值