克鲁斯卡尔算法(Kruskal)求最小生成树(MST)过程详解
基本思想
先构造一个只含 n 个顶点、而边集为空的子图,把子图中各个顶点看成各棵树上的根结点,之后,从网的边集 E 中选取一条权值最小的边,若该条边的两个顶点分属不同的树(不构成回路),则将其加入子图,即把两棵树合成一棵树,反之,若该条边的两个顶点已落在同一棵树上(构成回路),则不可取,而应该取下一条权值最小的边再试之。依次类推,直到森林中只有一棵树,也即子图中含有 n-1 条边为止。
基本步骤
1、新建图G,G中拥有原图中相同的节点,但没有边;
2、将原图中所有的边按权值从小到大排序;
3、从权值最小的边开始,如果这条边连接的两个节点于图G中不在同一个连通分量中,则添加这条边到图G中;
4、重复3,直至图G中所有的节点都在同一个连通分量中。
关于步骤3的解释:选取的边要是剩下边权值最小的,且与G中的边不构成回路。
详细步骤图解
原图如下:
第一步:判断权值为1的连接边hg是否属于集合,由于开始集合为空,则将两个节点加入到集合,且连接该边,并判断是否属于回路;
第二步:判断权值为2的连接边ic是否属于集合,由于集合只有节点h和g,则将节点i和c加入到集合中,且连接该边,并判断是否属于回路;
第三步:判断权值为2的连接边gf是否属于集合,根据判断规则,把f加入到集合,且连接该边;
第四步:根据判断规则,将节点a和b加入到集合,且连接该边;
第五步:根据判断规则,连接该边cf;
第六步:根据判断规则,连接节点i和g时形成回路,则放弃,继续下次判断;
第七步:判断权值为7的连接边;根据判断规则,节点i和h形成回路,则放弃,将节点d加入到集合,并连接该边;
第八步:判断权值为8的连接边;根据判断规则,连接节点a和h;
第九步:判断权值为9的连接边;将节点e加入到集合,并连接该边;此时集合已经包含所有节点,则终止循环;
总结
1、克鲁斯卡尔算法需要对图的边进行访问,所以克鲁斯卡尔算法的时间复杂度只和边有关系,可以证明其时间复杂度为O(eloge);
2、克鲁斯卡尔算法和普利姆算法一样,都是贪心算法,不同的是克鲁斯卡尔算法是从森林到树,而普利姆一直保持着一个树。
3、克鲁斯卡尔算法适合边少的,也即稀疏图。
参考文章:
【1】算法——最小生成树:Kruskal算法、Prim算法
【2】克鲁斯卡尔算法
克鲁斯卡尔算法(Kruskal)求最小生成树(MST)过程详解相关推荐
- 【数据结构】图—克鲁斯卡尔算法(原理及C程序详解)
普利姆(Prim)算法是以某个顶点为起点,逐步寻找各个顶点上权值最小的边来构建生成树. 文章指引:图-普里姆(Prim)算法(原理和C程序解释) 而克鲁斯卡尔(Kruskal)算法是以边为目标,直接寻 ...
- Java普利姆算法(Prim)与克鲁斯卡尔算法(Kruskal)
1.Java普利姆算法(Prim)与克鲁斯卡尔算法(Kruskal) 普利姆算法(Prim)与克鲁斯卡尔算法(Kruskal)求**最小生成树(极小连通子图)**的算法 1.1普利姆算法(Prim) ...
- prim算法求最小生成树_克鲁斯卡尔算法(Kruskal算法)求最小生成树
上一节介绍了求最小生成树之普里姆算法.该算法从顶点的角度为出发点,时间复杂度为O(n2),更适合与解决边的绸密度更高的连通网.本节所介绍的克鲁斯卡尔算法,从边的角度求网的最小生成树,时间复杂度为O(e ...
- 无向图的最小生成树(克鲁斯卡尔算法 Kruskal)
引子: 克鲁斯卡尔算法的作用是:构建图的最小生成树. 克鲁斯卡尔算法 Kruskal的构造过程: 1.初始化图:n个顶点,n个连通分量(如果两个顶点的连通分量相同,表示两点在同一个连通图中).把所有的 ...
- 普利姆算法(prim)求最小生成树(MST)过程详解
生活中最小生成树的应用十分广泛,比如:要连通n个城市需要n-1条边线路,那么怎么样建设才能使工程造价最小呢?可以把线路的造价看成权值求这几个城市的连通图的最小生成树.求最小造价的过程也就转化成求最小生 ...
- 贪心算法(Greedy Algorithm)最小生成树 克鲁斯卡尔算法(Kruskal#39;s algorithm)
克鲁斯卡尔算法(Kruskal's algorithm)它既是古典最低的一个简单的了解生成树算法. 这充分反映了这一点贪心算法的精髓.该方法可以通常的图被表示.图选择这里借用Wikipedia在.非常 ...
- 克鲁斯卡尔算法c语言,最小生成树-克鲁斯卡尔(Kruskal)算法
1. 克鲁斯卡尔算法简介 克鲁斯卡尔算法是一种用来寻找最小生成树的算法(用来求加权连通图的最小生成树的算法).在剩下的所有未选取的边中,找最小边,如果和已选取的边构成回路,则放弃,选取次小边. 而具体 ...
- 数据结构——最小生成树之克鲁斯卡尔算法(Kruskal)
最小生成树算法 prime算法和克鲁斯卡尔算法 克鲁斯卡尔算法 思路 优先队列+并查集 Kuskal算法 [算法简介]:上一篇中的Prime算法是一种"加点式的算法",而Kuska ...
- 数据结构与算法-克鲁斯卡尔算法(Kruskal) | 尚硅谷韩顺平
提出问题 基本介绍 克鲁斯卡尔(Kruskal)算法,求加权连通图最小生成树的算法 基本思想:按权值从小到大顺序选择n-1条边,保证n-1条边不够成回路 具体做法:先构造一个只有n顶点的森林,然后按权 ...
最新文章
- RADStudio连接MySQL_使用FireDac(Delphi)在Firebird中创建数据库
- %3cphp和%3c php_关于 PHP 表单安全性
- vue控制台报错Duplicate keys detected: 'xxxx'. This may cause an update error.解决方案
- Keras-Sequential模型(1)
- DNT 3.1 快速安装手记
- RoboWare studio学习笔记
- BT5中安装VMWare Tool的相关命令
- 番外7. 在 Python OpenCV 寻找目标区域以及边缘扩展的解决方案
- foxmail 登陆gmail报密码错误
- 99%的手机Root方法都在这里
- 洛谷P5437/5442 约定(概率期望,拉格朗日插值,自然数幂)
- 创宇滤镜|API防刷|短信邮件接口防刷|验证码防刷|搜索防刷 - 知道创宇云安全
- docker查看mysql镜像版本_Docker 查看镜像信息
- 分布式服务发现与注册中心 Consul 中文入门指南
- 工业相机 镜头 焦距 视野 计算相关
- 计算机冷门知识大全集,阴阳师冷门小知识汇总 冷门小知识合集一览
- 手撕HashMap(原理)
- 嵌入式主板在数控机床领域的应用
- Dendro NH2-PEG-Dendro NH2,Dendro Amine-PEG-Dendro Amine,PEG超支化树状胺
- 领英辅助工具—领探,可突破领英的好友人脉限制