克鲁斯卡尔算法生成最小树(画图)
克鲁斯卡尔算法生成最小树(画图)
- (1)克鲁斯卡尔算法概念
- (2)实现思路
- (3)例题
- 例题解题思路分析:
- 1.根据信息画出这棵树的所有连通网
- 2.我们根据权值的大小进行升序排序
- 2.根据权值的大小依次连接顶点
- 总结:
(1)克鲁斯卡尔算法概念
克鲁斯卡尔算法是求连通网的最小生成树的另一种方法。与普里姆算法不同,它的时间复杂度为O(eloge)(e为网中的边数),所以,适合于求边稀疏的网的最小生成树
(2)实现思路
对于任意一个连通网的最小生成树来说,在要求总的权值最小的情况下,最直接的想法就是将连通网中的所有边按照权值大小进行升序排序,从小到大依次选择。
克鲁斯卡尔算法的具体思路是:将所有边按照权值的大小进行升序排序,然后从小到大一一判断,条件为:如果这个边不会与之前选择的所有边组成回路,就可以作为最小生成树的一部分;反之,舍去。直到具有 n 个顶点的连通网筛选出来 n-1 条边为止。筛选出来的边和所有的顶点构成此连通网的最小生成树;
可能概念有点难理解,看后面的例子就懂了。
(3)例题
答案为最后一张图
例题解题思路分析:
怎么得到的呢?
1.根据信息画出这棵树的所有连通网
我们知道该图是有7
个顶点,12
条边
根据信息我们先画出这棵树的所有连通网,如下图:
2.我们根据权值的大小进行升序排序
根据上图我们知道权值的大小按升序排序依次为:
3→4→5→6→8→9→10→12→15→18→20→25
2.根据权值的大小依次连接顶点
条件为:如果这个边不会与之前选择的所有边组成回路,就可以作为最小生成树的一部分;反之,舍去。直到具有 n 个顶点的连通网筛选出来 n-1 条边为止。
我们这个例子有7个顶点:所以我们连通网筛选出来 6
条边为止。
连接3号线
3
→4→5→6→8→9→10→12→15→18→20→25
连接4号线
3→4
→5→6→8→9→10→12→15→18→20→25
连接5号线
3→4→5
→6→8→9→10→12→15→18→20→25
连接6号线时,我们发现,1,2,3这三个顶点形成了回路,舍弃这条线的连接
3→4→5→6
→8→9→10→12→15→18→20→25连接8号线
3→4→5→6→8
→9→10→12→15→18→20→25
连接9号线,我们发现,1,3,4,6这四个顶点形成了回路,舍弃这条线的连接
3→4→5→6→8→9
→10→12→15→18→20→25连接10号线
3→4→5→6→8→9→10
→12→15→18→20→25
连接12号线,我们发现,1,2,3,5这四个顶点形成了回路,舍弃这条线的连接
3→4→5→6→8→9→10→12
→15→18→20→25连接15号线,我们发现,1,3,4这三个顶点形成了回路,舍弃这条线的连接
3→4→5→6→8→9→10→12→15
→18→20→25连接18号线我们发现,1,2,5,6,4这五个顶点形成了回路,舍弃这条线的连接
3→4→5→6→8→9→10→12→15→18
→20→25连接20号线
3→4→5→6→8→9→10→12→15→18→20
→25
连接25号线,肯定形成回路,因为最小树已经生成,所有的顶点已经连通
3→4→5→6→8→9→10→12→15→18→20→25
最后就得到了最小树:是不是很简单呢!
总结:
最小生成树的方法有:克鲁斯卡尔算法和普里姆算法,我们这里介绍了克鲁斯卡尔算法
克鲁斯卡尔算法:从边的角度求网的最小生成树,时间复杂度为O(eloge)。和普里姆算法恰恰相反,更适合于求边稀疏的网
的最小生成树。
普里姆算法:该算法从顶点的角度为出发点,时间复杂度为O(n2),更适合与解决边的绸密度更高的连通网
代码实现我就不写了:可以看看其他博客主的实现
本文就你有帮助的,点个赞 给予渺小的博客主一个支持哦
克鲁斯卡尔算法生成最小树(画图)相关推荐
- 克鲁斯卡尔算法生成最小生成树
克鲁斯卡尔算法的介绍 1)克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法. 2)基本思想:按照权值从小到大的顺序选择 n-1条边,并保证这 n-1条边不构成回路 3)具体做法: ...
- 常用的十种算法--克鲁斯卡尔算法
1.克鲁斯卡尔算法应用场景: 使用克鲁斯卡尔算法生成最小生成树. 2.克鲁斯卡尔算法介绍: 克鲁斯卡尔算法的核心思想是:在带权连通图中,不断地在边集合中找到最小的边,如果该边满足得到最 ...
- 【数据结构】图的应用(普利姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法、拓扑排序)
最小生成树 什么是最小生成树 是一棵树 - 无回路 - |V|个顶点一定有|V|-1条边 是生成树 - 包含全部顶点 - |V|-1条边全在图里 贪心算法 什么是"贪":每一步都要 ...
- 【数据结构基础整理】图--06:克鲁斯卡尔算法详解
详解最小生成树中的克鲁斯卡尔算法 0x01.关于克鲁斯卡尔算法 Kruskal算法是一种用来查找最小生成树的算法,由Joseph Kruskal在1956年发表.克鲁斯卡尔算法主要针对边集数组展开. ...
- 克鲁斯卡尔算法_修路问题
克鲁斯卡尔算法 问题描述 修路问题:七个村庄(A,B,C,D,E,F,G)要修路,七个村庄之间路线很多,要怎样才可以在保证联通所有村庄的同时修最短的路 思路分析 我们可以把所有的边存入数组,然后按照从 ...
- (浙大-19-夏-数据结构)Prim(普里姆算法)和Kruskal(克鲁斯卡尔算法)最小生成树
Prim最小生成树算法(贪心算法) 最小生成树的性质: 一棵树 没有回路 n 个顶点含有 n - 1 条边 生成树 所有顶点都在里面 n - 1 条边都在图中 边的权重最小 在生成树的图中任意加一条边 ...
- prim算法求最小生成树_克鲁斯卡尔算法(Kruskal算法)求最小生成树
上一节介绍了求最小生成树之普里姆算法.该算法从顶点的角度为出发点,时间复杂度为O(n2),更适合与解决边的绸密度更高的连通网.本节所介绍的克鲁斯卡尔算法,从边的角度求网的最小生成树,时间复杂度为O(e ...
- 最小生成树(普里姆算法【Prim】与克鲁斯卡尔算法【Kruskal】)
写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...
- 最小生成树——普里姆算法和克鲁斯卡尔算法
最小生成树 用来解决工程中的代价问题. 一:普里姆算法 具体代码用C语言实现如下: typedef int VRType;typedef char InfoType;#define MAX_NAME ...
最新文章
- ps用法linux,在linux上使用ps(转载)
- UBUNTU adb连接android设备
- 49 jQuery事件
- 比特币如何达成共识 - 最长链的选择
- PyTorch - torchvision - datasets
- 多线程介绍和多线程模块-lock-互斥锁
- 中国工程院院士徐宗本:大数据的挑战和问题
- OMG,学它!mac怎么安装java插件
- readonly和disabled的区别
- Android学习(五)—— Android初级控件
- 20140608 科技脉搏 -下半身需求是人类共同需求,有多少人就有多大市场
- vue3 eslint吐槽记录
- 多系统精密星历下载与分析
- win10系统任务栏卡死
- 03 ,n 维向量,向量运算,向量组,向量组的线性组合,基,张成空间,向量组的线性相关性 :
- 【3】WEB安全学习----HTTP协议
- java 自动转 golang_JAVA转Golang
- ESM蛋白质语言模型学习笔记
- curl https -k
- 使用阿里云消息服务mns发送短信
热门文章
- 校招 | 梅特勒托利多2023届校招
- 读书笔记——魔鬼经济学
- 自定义ViewGroup与SurfaceView
- Varnish高性能开源HTTP加速器:Varnish Nginx和Varnish Apache搭建配置
- 路与远方:从方舟开源,说到中国软件行业的生态未来
- 检讨书生成微信小程序工具源码-拥有流量主安装搭建简单
- 注意力机制 - 多头注意力
- JAVA毕业设计江智能股票推荐系统计算机源码+lw文档+系统+调试部署+数据库
- python绘制圣诞树、烟花、爱心及节日倒计时
- mc服务器plotme修改,我的世界plotme地皮指令