数据结构-最小生成树-Prim算法和Kruskal算法

什么是生成树: 对于一个连通图,生成树是包含图中全部顶点的一个极小连通子图

对于无向图G:
在这里插入图片描述
他有多个生成树:
在这里插入图片描述

最小生成树就是最小代价树

对于一个带权联通无向图G=(V,E),生成树不同,每棵树的权(即树种所有边上的权值之和)也可能不同。若生成树T的权为最小的,则T成为G的最小生成树

最小生成树可能有多个,例如:


对于这三个生成树权都是5,这三个都是最小生成树。

若一个连通图本身就是一棵树,则其最小生成树就是它本身。

只有连通图才有生成树,非连通图只有连通森林

在这里插入图片描述例如这个连通图的最小生成树就是本身

如何求最小生成树? 答:Prim算法和Kruskal算法

Prim算法:

从某个顶点开始构建生成树,每次将代价最小的新顶点纳入生成树,直到所有顶点都纳入为止。

例如对于这样一个连通图:
在这里插入图片描述
构建最小生成树步骤如下:
1、从P城开始,代价最小的是到学校的边,将学校和P城相连
2、距离这个树最小距离的是矿场,将矿场连到这个树(注意是距离这个树最近的边,不是这个连通图最短的边)
当然这里也可以连接渔村,因为他们距离都是4,之前说过最小生成树不唯一
3、接着距离这个树最近的应该是渔村,连接到树
4、距离这个树最近的是农场,连接到树
5、距离最近的是电站,连接到树。所有的点都连接完成。
最小代价为1+4+2+5+3=15
在这里插入图片描述

Kruskal算法(克鲁斯卡尔)

每次选择一条权值最小的边,使这条边的两头联通(原本已经联通的就不选

还是对于这样一个连通图:
在这里插入图片描述
步骤如下:
1、首先找权值最小的边,为学校到P城的边,由于这两个点本来就没连通,因此连接
2、接着再找权值最小的边,为矿场到渔村的边,连接这两个点
3、连接农场和电站
4、此时最短的边有两个:P城和矿场,P成和渔村,哪个都可以,我在这里连接P城和矿场。
5、最后连接P城和农场。构建完成
在这里插入图片描述
权值也是15

Prim算法和Kruskal算法区别:

在这里插入图片描述
Prim算法适合边稠密的图
Kruskal算法适合边稀疏图

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值