【图论】【Matlab】最小生成树之Kruskal算法【贪心思想超详细详解Kruskal算法并应用】

本文介绍了Kruskal算法用于寻找图的最小生成树。首先,讲解了算法的基本思想和步骤,包括贪心策略、边的选择和环的检测。接着,展示了在MATLAB中应用`minspantree()`函数实现最小生成树的代码示例。最后,强调了学习算法对于数学建模和相关竞赛的重要性。
摘要由CSDN通过智能技术生成

最小生成树之Kruskal算法
在这里插入图片描述
注意:内容学习来自:b站CleverFrank数模算法精讲


前言

博主今天给大家带来的是最小生成树中两个经典算法Kruskal算法和Prim算法中的Kruskal算法。

今天的内容对大家图论和图的相关基础知识有一定考察。大家在食用本篇之前要稍微了解一下Matlab生成图的方式和图相关数据结构的一些操作。


那么这里博主先安利一下一些干货满满的专栏啦!

数据结构专栏:数据结构 这里包含了博主很多的数据结构学习上的总结,每一篇都是超级用心编写的,有兴趣的伙伴们都支持一下吧!
算法专栏:算法 这里可以说是博主的刷题历程,里面总结了一些经典的力扣上的题目,和算法实现的总结,对考试和竞赛都是很有帮助的!
力扣刷题专栏:Leetcode 想要冲击ACM、蓝桥杯或者大学生程序设计竞赛的伙伴,这里面都是博主的刷题记录,希望对你们有帮助!
C的深度解剖专栏:C语言的深度解剖 想要深度学习C语言里面所蕴含的各种智慧,各种功能的底层实现的初学者们,相信这个专栏对你们会有帮助的!


实际问题引入

在这里插入图片描述
其实这道题的答案,其实就是找到这个图的最小生成树。

Kruskal算法

此算法可以称为“加边法”,初始最小生成树的边数为 0,每迭代一次就选择一条满足条件的最小代价的边,加入到最小生成树边的集合里面。
其实核心思想就是贪心思想:通过局部最优达到整体最优

  • 将所有的边权进行排序
  • 不断迭代选择权最小的边,直到所有的点被连起来(边数=节点数-1)。
  • 在迭代期间,如果边构成了环,就要丢弃该边,因为树中是不存在环的!

整体代码展示

matlab中,最小生成树的生成直接用minspantree()函数就行。

s=[1,1,1,1,2,2,3,3,4,4,5,5,6];
t=[2,3,4,5,3,6,5,7,5,6,6,7,7];
w=[35,24,10,25,25,20,15,11,12,30,15,25,18];
names={'1','2','3','4','5','6','7'};
G=graph(s,t,w,names);
p=plot(G,"EdgeLabel",G.Edges.Weight);
% 求解最小生成树
T=minspantree(G,"Method","sparse");
% sparse代表的是Kruskal算法
% dense代表的是Prim算法

% sparse:Kruskal算法
% 算法按权重对所有的边排序,然后将不构成循环的边添加到树中
p=plot(G,"EdgeLabel",G.Edges.Weight);
highlight(p,T,"NodeColor","red","EdgeColor","red"); 
% 将最小生成树的边设置为红色!

生成的图:
在这里插入图片描述
生成的最小生成树:
在这里插入图片描述
我们也可以把最小生成树的边和节点打印出来,也可以把整段路的权加起来看看:
在这里插入图片描述

尾声

看到这里,相信我们已经学会Kruskal算法寻找最小生成树的过程了,当然,这离数学建模的要求,离我们的目标还非常遥远,博主在不断学习的过程中,也希望可以通过分享学习日记的方式带动大家!如果你感觉这篇文章对你有帮助的话,不要忘了点赞!关注!收藏噢!

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@行李箱

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

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

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

打赏作者

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

抵扣说明:

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

余额充值