贪心算法之克鲁斯卡尔算法
最小生成树性质:设G=(V,E)是一个连通网络,U是顶点集V的一个真子集。若(u,v)是G中一条“一个端点在U中(例如:u∈U),另一个端点不在U中的边(例如:v∈V-U),且(u,v)具有最小权值,则一定存在G的一棵最小生成树包括此边(u,v)。
该定理阐明的属性也被称之为切割属性,简单讲就是横跨该切割的权重最小的边,即一端在s,另一端v-s,这条边一定在某一颗最小生成树的一条边上
克鲁斯卡尔算法步骤:
1.对所有边的权值进行递增排序,
2.对于从小到大的每一条边,如果加入后不构成环就加入,反之排除在外,直到所有边判断完毕。【ps:算法时间取决于边的数目】
下面是伪代码
可以看到,2步操作执行的正是并查集的find union操作
算法的正确性证明:使用数学归纳法,针对顶点
1.n=2时,即只有两个点的时候,该算法显然成立,一次得结果
2.n>2时,假设2<=j<n,成立,即n-1顶点已经连通了,这是一颗n-1个顶点的最小生成树,后面选择权值最小的一条能联通n个顶点的边加入即构成最小生成树
假设这个边不在最小生成树上,那么存在一条边小于这个权值的一条边,显然它应该在之前被选出来,那样的话把它加入到这n-1个顶点中就构成了环,删除一条权值最大的边,就产生了一颗权值更小的n-1个顶点的最小生成树
贪心算法之克鲁斯卡尔算法相关推荐
- 最小生成树(普利姆算法、克鲁斯卡尔算法)
给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树. 求最小生成树的算法 (1) 克鲁斯卡尔算法 图的存贮结构采用边集数组,且权值相等的边在数组中排列次序可以是 ...
- 用c语言描述普里姆算法和克鲁斯卡尔算法,克鲁斯卡尔算法+普里姆算法 详解
克鲁斯卡尔算法: [1]克鲁斯卡尔算法 普里姆算法是以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树. 克鲁斯卡尔算法是直接以边为目标去构建. 因为权值是在边上,直接去找最小权值的边来构建生 ...
- 普利姆算法和克鲁斯卡尔算法求解最小生成树
Q:最小生成树有什么用? A:譬如我要去五个城市旅游,每两个城市之间可能有路也可能没有,路的距离可能一样也可能不一样,随机从一个城市出发,我想要把每个城市走一遍,怎么样走过的路距离最短,比如我想从上海 ...
- 【数据结构】图的应用(普利姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法、拓扑排序)
最小生成树 什么是最小生成树 是一棵树 - 无回路 - |V|个顶点一定有|V|-1条边 是生成树 - 包含全部顶点 - |V|-1条边全在图里 贪心算法 什么是"贪":每一步都要 ...
- 十大常用算法之克鲁斯卡尔算法
十大常用算法的完整实现 一.二分查找算法:https://blog.csdn.net/weixin_46635575/article/details/121532149 二.分治算法:https:// ...
- 最小生成树——普里姆算法和克鲁斯卡尔算法
最小生成树 用来解决工程中的代价问题. 一:普里姆算法 具体代码用C语言实现如下: typedef int VRType;typedef char InfoType;#define MAX_NAME ...
- 【算法】克鲁斯卡尔算法
1.概述 视频地址:克鲁斯卡尔算法 下面看一个场景和问题 某城市新增7个站 点(A,B,C,D,E,F,G),现在需要修路把7个站点连通 各个站点的距离用边线表示(权),比如A-B距离12公里 问:如 ...
- 两种构造最小生成树的算法(普里姆算法,克鲁斯卡尔算法)
(一)普里姆算法 普里姆算法求最小生成树:从生成树中只有一个顶点开始,到定点全部进入生成数为止: 2.克鲁斯卡尔算法. 思想:将所有边按其权值从小到大排一遍,从小到大依次选取边,加入最小生成树中,若加 ...
- 十大算法之克鲁斯卡尔算法
克鲁斯卡尔算法介绍 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法. 基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路 具体做法:首先构造一个只含n ...
最新文章
- 用了 Lambda 之后,发现可以忘记设计模式了
- 大数据分布式集群搭建(插曲)
- 学习笔记Hive(六) —— Hive开发应用
- [转].Net实现本地化简易教程
- c++虚函数以及虚继承图示
- 图解系列之垃圾收集标记整理算法
- MySQL与Oracle的语法区别详细对比 (转)
- 重置IE浏览器的操作
- 文件和异常——python从编程入门到实践
- 同源、跨域、跨站、SameSite与withCredentials
- 攻防世界 Pwn Mary_Morton
- iOS核心动画以及UIView动画的介绍
- 怎么样给Oracle数据库中的表添加列?
- svn: E170013: Unable to connect to a repository at URL ...
- Unity打开Windows虚拟键盘
- 推荐十个最好的Java性能故障排除工具:
- MySQL Day05 子查询、函数、MD5加密、SELECT小结
- 大数据Spark电影评分数据分析
- 感受 OpenDNS
- python单位根检验平稳性怎么看是否平稳_Python关于时间序列的平稳性检验