贪心算法 | 最小生成树(Kurskal算法)

1、算法设计

什么是Kurskal算法?

假设 G = (V,E)是无向连通带权图,V = {1,2,……,n};设最小生成树 T = (V , TE),该树的初始状态为只有 n 个顶点而无边的非连通图 T = (V , { }),Kurskal算法将这 n 个顶点看成是 n 个独立的连通分支。

它首先将所有的边按权值从小到大排序,然后只要 T 中选中的边数不到 n-1 ,就做如下贪心选择:

在边集 E 中选取权值最小的边 (i , j),如果将边 (i , j)加入集合 TE 中不产生回路,就将该边加入边集 TE 中,即用边 (i , j) 将这两个连通分支合并连接成一个连通分支;否则继续选择下一条边。将边 (i , j) 从集合 E 中删去。继续上面的贪心选择,直到 T 中所有顶点都在同一个连通分支上为止。此时,选取到的 n-1 条边恰好构成 G 的一颗最小生成树 T 。

Kurskal算法的步骤:

步骤 1:初始化。将图中 G 的边集 E 中的所有边按权值从小到大排序,边集 TE = { },将每一个点都初始化为一个独立的分支,也就是每一个点对应一个集合。

步骤 2:在 E 中寻找权值最小的边 (i , j)。

步骤 3:若顶点 i 和 j 位于两个不同的连通分支,则将边 (i , j) 加入集

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@烟雨倾城ゝ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值