一文带你弄懂普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法

Prim算法

Prim算法用于构造最小生成树,且适用于稠密图。


基本思想 : 归并顶点

设连通网络 N = { V, E }

  1. 从某顶点 u0 出发,
    选择与它关联的具有最小权值的边(u0, v),
    将其顶点加入到生成树的顶点集合U中
  2. 每一步从U中挑选一个顶点u,而另一个顶点不在U中的各个顶点中选择权值最小的边(u, v),把它的顶点加入到U中
  3. 直到所有顶点都加入到生成树顶点集合U中为止

举例

在这里插入图片描述

Kruskal算法

Krusklal算法用于构造最小生成树,且适用于稀疏图。


基本思想 : 归并边

设连通网络 N = { V, E }

  1. 构造一个只有 n 个顶点,没有边的非连通图 T = { V, ∅ \varnothing }, 每个顶点自成一个连通分量
  2. 在 E 中选最小权值的边,若该边的两个顶点落在不同的连通分量上,则加入 T 中;否则舍去,重新选择
  3. 重复下去,直到所有顶点在同一连通分量上为止

举例

在这里插入图片描述

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
普里姆(Prim)算法克鲁斯卡尔(Kruskal)算法都是用于解决最小生成树问题的算法。 最小生成树问题是指在一个无向连通图中,找到一棵生成树,使得树上所有边的权值之和最小。生成树是指一个无向图的生成子图,它是一棵树,且包含图中所有顶点。 下面我们分别介绍普里姆算法克鲁斯卡尔算法: 1. 普里姆算法 普里姆算法是一种贪心算法,它从一个任意点开始,逐步扩展生成树,每次选择当前生成树到未加入的点中距离最近的点,并将其加入生成树。 具体实现步骤如下: - 随机选择一个起始点,将其加入生成树。 - 在生成树中的所有节点中,找到到未加入生成树的节点中距离最小的节点,将其加入生成树。 - 重复以上步骤,直到生成树包含了所有节点。 2. 克鲁斯卡尔算法 克鲁斯卡尔算法也是一种贪心算法,它从边集合中选择边,逐步扩展生成树,每次选择当前边集合中权值最小的边,并将其加入生成树。 具体实现步骤如下: - 将所有边按照权值从小到大排序。 - 从权值最小的边开始,逐个加入生成树,如果加入当前边会形成环,则不加入该边。 - 重复以上步骤,直到生成树包含了所有节点。 两种算法的时间复杂度都是O(ElogE),其中E为边数。普里姆算法在处理稠密图时效率更高,而克鲁斯卡尔算法在处理稀疏图时效率更高。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猫咪钓鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值