贪心生成最小生成树-克鲁斯卡尔(Kruskal)算法(归并排序)(并查集)

这个最小生成树的算法倒是比Prim算法更容易理解并且更好实现,但是在此之前需要学习并查集的算法,主要思想是对边进行排序,然后依次选取n-1条最短的边就能把n个节点连接起来。但是如果有一条边将几个节点形成了一个环,那么这条边就不能加入最小生成树如下图:


此时1 2 3号节点已经连接完成,假设接下来选取最小的边是2-3的边,将其连接的话就会形成环!


但是很明显此时2-3的边完全不需要连接,因为不加入2-3边的话,1 2 3号节点已经完成了连接,因为最小生成树的概念是使用最小权值将所有节点连接形成通路!所以可以判断如果形成了连通环的话,那么总权值必定不是最小的(因为形成环的某条边是完全没有必要的)

所以每次选取边的时候需要判断这条边所连接的两个节点是否会和以加入最小生成树的节点形成环,如果形成环则跳过该边的选取。

综上所述,克鲁斯卡尔算法描述如下:<

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值