数据结构:Prim算法&Kruskal算法

Prim算法

算法思想
从图中任意取出一个顶点,把他当成一棵树,然后从与这棵树相接的边中选取一条最短(权值最小)的边,并将这条边及其所连接的顶点也并入这棵树中,此时得到一棵有两个顶点的树。然后从与这棵树相接的边中,再选取最短(权值最小)的边,并将这条边及其所连顶点并入当前树,得到一棵3个顶点的树。重复操作,直到图中所有顶点并入树中,此时得到的生成树就是最小生成树。

算法步骤

  • 输入:一个加权连通图,其中顶点集合为V,边集合为E
  • 初始化:Vnew = {x},其中x为集合V中的任一节点(起始点),Enew = {},为空
  • 重复下列操作,直到Vnew = V
    ◆ 在集合E中选取权值最小的边<u,v>
    其中:u∈集合Vnew,而v≮集合Vnew
    ◆ 将v顶点加入集合Vnew,将<u,v>边加入集合Enew
  • 输出:使用集合Vnew和Enew来描述所得到的最小生成树
时间复杂度
最小边、权的数据结构时间复杂度(总计)
邻接矩阵、搜索O(V²)
图例

Prim算法的核心就是挑边,其中边的一端在Vnew集合,而另一端在V集合.
在这里插入图片描述
在这里插入图片描述

Kruskal算法

算法思想:每次找出侯选边中权值最小的边,就将该边并入生成树中,重复此过程直到所有的边都被检测完为止。

在剩下的所有未选取的边中,找最小边,如果与已选取的边构成回路,则放弃,选取次小边.

在这里插入图片描述

Prim算法和Kruskal算法都针对于无向图。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值