萌新关于最小生成树MST的Prim算法贪心正确性的浅显理解

本文介绍了Prim算法寻找图的最小生成树的过程,并通过实例解释了为何选择与集合A中点相连的最小边是正确的。作者通过逐步构建树的过程,论证了这种贪心策略能确保找到最小边权和。文章适合图论初学者阅读,旨在解答关于Prim算法正确性的疑惑。

【纪念本萌新的第一篇博客】

这篇文章是写给刚入门的自己看的,如果有别的同学也有类似的疑惑,欢迎交流♂。

最小生成树,既是从一个含有N个点的图中,选出N-1条边,并连接这N个点,使得选出的边的权值之和是所有方案中最小的。

网上关于Kruskal和Prim的讲解已经很多了,这里就不多赘述。我在看关于Prim算法的讲解的时候,心中最疑惑的问题是:为什么这样的贪心是正确的?

粗略地想了一下,现在来浅谈我的理解。

1.先谈谈Prim的具体算法

举个例子,比如我们现在要求这个图的MST。

 

从节点1开始,将节点1加入集合A,在集合A所有的点中,与之相联的最小的边是4,我们选取这条边,并将节点2加入集合A

 现在集合A有两个节点:1和2。确定1条边,边权和为4。我们在集合A的点中继续选取边权最小的相连边,这条边显然是连接2和3的边,于是我们将3加入集合A。

 

 现在集合A有三个节点:1,2和3。确定了两条边,边权和为5。继续如上操作,选取边权为2的边,将4加入集合A,这时候MST已经出来了。

2.接下来证明贪心正确性

那么为什么只要选取与集合A中的点相连的最小边就可以了呢?

我们将于节点1直接相连的点全部选取出来,构成一棵树

在这棵树中,显然是连接节点1、2的边最小,选取这条边没有疑问。接下来将1,2看为一个整体,重复上述操作,选取的依然是最小的边。

当我们一直重复上述操作,会发现其实我们一直在选根节点到子节点的最小边权,如此下来最后的边权和显然是最小的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值