最小生成树性质:设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. 最小生成树(普利姆算法、克鲁斯卡尔算法)

    给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树. 求最小生成树的算法 (1) 克鲁斯卡尔算法 图的存贮结构采用边集数组,且权值相等的边在数组中排列次序可以是 ...

  2. 用c语言描述普里姆算法和克鲁斯卡尔算法,克鲁斯卡尔算法+普里姆算法 详解

    克鲁斯卡尔算法: [1]克鲁斯卡尔算法 普里姆算法是以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树. 克鲁斯卡尔算法是直接以边为目标去构建. 因为权值是在边上,直接去找最小权值的边来构建生 ...

  3. 普利姆算法和克鲁斯卡尔算法求解最小生成树

    Q:最小生成树有什么用? A:譬如我要去五个城市旅游,每两个城市之间可能有路也可能没有,路的距离可能一样也可能不一样,随机从一个城市出发,我想要把每个城市走一遍,怎么样走过的路距离最短,比如我想从上海 ...

  4. 【数据结构】图的应用(普利姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法、拓扑排序)

    最小生成树 什么是最小生成树 是一棵树 - 无回路 - |V|个顶点一定有|V|-1条边 是生成树 - 包含全部顶点 - |V|-1条边全在图里 贪心算法 什么是"贪":每一步都要 ...

  5. 十大常用算法之克鲁斯卡尔算法

    十大常用算法的完整实现 一.二分查找算法:https://blog.csdn.net/weixin_46635575/article/details/121532149 二.分治算法:https:// ...

  6. 最小生成树——普里姆算法和克鲁斯卡尔算法

    最小生成树 用来解决工程中的代价问题. 一:普里姆算法 具体代码用C语言实现如下: typedef int VRType;typedef char InfoType;#define MAX_NAME ...

  7. 【算法】克鲁斯卡尔算法

    1.概述 视频地址:克鲁斯卡尔算法 下面看一个场景和问题 某城市新增7个站 点(A,B,C,D,E,F,G),现在需要修路把7个站点连通 各个站点的距离用边线表示(权),比如A-B距离12公里 问:如 ...

  8. 两种构造最小生成树的算法(普里姆算法,克鲁斯卡尔算法)

    (一)普里姆算法 普里姆算法求最小生成树:从生成树中只有一个顶点开始,到定点全部进入生成数为止: 2.克鲁斯卡尔算法. 思想:将所有边按其权值从小到大排一遍,从小到大依次选取边,加入最小生成树中,若加 ...

  9. 十大算法之克鲁斯卡尔算法

    克鲁斯卡尔算法介绍 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法. 基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路 具体做法:首先构造一个只含n ...

最新文章

  1. 用了 Lambda 之后,发现可以忘记设计模式了
  2. 大数据分布式集群搭建(插曲)
  3. 学习笔记Hive(六) —— Hive开发应用
  4. [转].Net实现本地化简易教程
  5. c++虚函数以及虚继承图示
  6. 图解系列之垃圾收集标记整理算法
  7. MySQL与Oracle的语法区别详细对比 (转)
  8. 重置IE浏览器的操作
  9. 文件和异常——python从编程入门到实践
  10. 同源、跨域、跨站、SameSite与withCredentials
  11. 攻防世界 Pwn Mary_Morton
  12. iOS核心动画以及UIView动画的介绍
  13. 怎么样给Oracle数据库中的表添加列?
  14. svn: E170013: Unable to connect to a repository at URL ...
  15. Unity打开Windows虚拟键盘
  16. 推荐十个最好的Java性能故障排除工具:
  17. MySQL Day05 子查询、函数、MD5加密、SELECT小结
  18. 大数据Spark电影评分数据分析
  19. 感受 OpenDNS
  20. python单位根检验平稳性怎么看是否平稳_Python关于时间序列的平稳性检验

热门文章

  1. 众首MVP们千里赴约杭州,为的就是那份兄弟情谊
  2. Java引用之WeakReference和SoftReference
  3. java面试中被问到项目中的难点怎么回答?
  4. linux进入windows磁盘,Linux与Windows硬盘资源互访
  5. JavaWeb阶段案例--简易版管理图书系统(增删改查)
  6. GameFramework篇:StarForce流程讲解
  7. python之time库
  8. [原创]发布一个原创作品:Mdisk 把126邮箱变网络硬盘的程序
  9. 用Python数据分析选购手机
  10. 怎样区分硬解机和软解机?