一 点睛

构造最小生成树还有一种算法,即 Kruskal 算法:设图 G=(V,E)是无向连通带权图,V={1,2,...n};设最小生成树 T=(V,TE),该树的初始状态只有 n 个节点而无边的非连通图T=(V,{}),Kruskal 算法将这n 个节点看成 n 个孤立的连通分支。它首先将所有边都按权值从小到大排序,然后值要在 T 中选的边数不到 n-1,就做这样贪心选择:在边集 E 中选择权值最小的边(i,j),如果将边(i,j)加入集合 TE 中不产生回路,则将边(i,j)加入边集 TE 中,即用边(i,j)将这两个分支合并成一个连通分支;否则继续选择下一条最短边。把边(i,j)从集合 E 中删去,继续上面的贪心选择,直到 T 中的所有节点都在同一个连通分支上为止。此时,选取的 n-1 条边恰好构成图 G 的一棵最小生成树 T。

Kruskal 算法用一种非常聪明的方法,就是运用集合避圈;如果所选择加入边的起点和终点都在 T 集合中,就可以断定会形成回路,变的两个节点不能属于同一个集合。

二 算法步骤

1 初始化。将所有边都按权值从小到大排序,将每个节点集合号都初始化为自身编号。

2 按排序后的顺序选择权值最小的边(u,v)。

3 如果节点 u 和 v 属于两个不同的连通分支,则将边(u,v)加入边集 TE 中,并将两个连通分支合并。

4 如果选取的边数小于 n-1,则转向步骤2,否则算法结束。

三 图解

设图 G=(V,E)是无向连通带权图。

1 初始化

将所有边都按权值从小到大排序,如下图所示。将每个节点都初始化为一个孤立的分支,即一个节点对应一个集合,集合号为该节点的序号,如下图所示。

2 找最小

在 E 中寻找权值最小的边e1(2,7),边值为1.

3 合并

节点2 和节点7的集合号不同,即属于两个不同的连通分支,将边(2,7)加入边集 TE 中,执行合并操作,将两个连通分支的所有节点都合并为一个集合;假设把小的集合号赋值给大的集合号,那么节点7的集合号将改为2.如下图所示。

4 找最小

在 E 中寻找权值最小的边e2(4,5),边值为3.

5 合并

节点4 和节点5的集合号不同,即属于两个不同的连通分支,将边(4,5)加入边集 TE 中,执行合并操作,将两个连通分支的所有节点都合并为一个集合;将节点 5 的集合号将改为4.如下图所示。

6 找最小

在 E 中寻找权值最小的边e3(3,7),边值为4.

7 合并

节点3 和节点7的集合号不同,即属于两个不同的连通分支,将边(3,7)加入边集 TE 中,执行合并操作,将两个连通分支的所有节点都合并为一个集合;将节点 3 的集合号将改为2.如下图所示。

8 找最小

在 E 中寻找权值最小的边e4(4,7),边值为9.

9 合并

节点4 和节点7的集合号不同,即属于两个不同的连通分支,将边(4,7)加入边集 TE 中,执行合并操作,将两个连通分支的所有节点都合并为一个集合;将节点 4、5 的集合号将改为2.如下图所示。

10 找最小

在 E 中寻找权值最小的边e5(3,4),边值为15.

11 合并

节点3 和节点4的集合号相同,属于相同的连通分支,不能选择,否则会形成回路。

12 找最小

在 E 中寻找权值最小的边e6(5,7),边值为16.

13 合并

节点5 和节点7的集合号相同,属于相同的连通分支,不能选择,否则会形成回路。

14 找最小

在 E 中寻找权值最小的边e7(5,6),边值为17.

15 合并

节点 5 和节点 6 的集合号不同,即属于两个不同的连通分支,将边(5,6)加入边集 TE 中,执行合并操作,将两个连通分支的所有节点都合并为一个集合;将节点 6 的集合号将改为2.如下图所示。

16 找最小

在 E 中寻找权值最小的边e8(2,3),边值为20.

17 合并

节点2 和节点3的集合号相同,属于相同的连通分支,不能选择,否则会形成回路。

18 找最小

在 E 中寻找权值最小的边e9(1,2),边值为23.

19 合并

节点 1 和节点 2 的集合号不同,即属于两个不同的连通分支,将边(1,2)加入边集 TE 中,执行合并操作,将两个连通分支的所有节点都合并为一个集合;将节点 2,3,4,5,6,7 的集合号将改为1.如下图所示。

20 选中的各边和各个节点就是最小生成树,各边权值之和就是最小生成树的代价。

Kruskal 算法介绍相关推荐

  1. prim算法适用条件_Prim算法和Kruskal算法介绍

    一.Prim算法 普利姆(Prim)算法适用于求解无向图中的最小生成树(Minimum Cost Spanning Tree).下面是Prim算法构造最小生成树的过程图解. 选择一个节点开始,比如V1 ...

  2. Kruskal算法(java)

    一.Kruskal算法介绍   Kruskal算法是一种构造最小生成树的算法.时间复杂度为 O ( ∣ E ∣ l o g ∣ E ∣ ) O(|E|log|E|) O(∣E∣log∣E∣).Krus ...

  3. Kruskal算法详解

    目录 1:kruskal算法介绍 2:kruskal算法代码展现 1:kruskal算法介绍 kruskal算法它是用来解决最小生成树类的问题,至于什么是最小生成树类的问题,就是在图论中,各个点都可以 ...

  4. 【 数据结构 | C语言】Kruskal 算法(克鲁斯卡尔算法)

    文章目录 Kruskal 算法介绍 图解说明 Kruskal 算法 C 语言 完整代码(复制粘贴可用) Kruskal 算法介绍 Kruskal算法,即克鲁斯卡尔算法 关于 Prim 算法,可查看博文 ...

  5. Kruskal算法 - C语言详解

    最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树.  例如,对于如上图G4所示的连通网可以有多棵权值总 ...

  6. 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)

    带权图分为有向和无向,无向图的最短路径又叫做最小生成树,有prime算法和kruskal算法:有向图的最短路径算法有dijkstra算法和floyd算法. 生成树的概念:联通图G的一个子图如果是一棵包 ...

  7. 最小生成树(Prim、Kruskal)算法,秒懂!

    前言 在数据结构与算法的图论中,(生成)最小生成树算法是一种常用并且和生活贴切比较近的一种算法.但是可能很多人对概念不是很清楚,什么是最小生成树? 一个有 n 个结点的连通图的生成树是原图的极小连通子 ...

  8. 图论(九)最小生成树-Kruskal算法

    前面说过,Kruskal是从最短边着手构建最小生成树的.其基本过程是:先对图中的所有边按照权重值从小到大进行排序,然后着手选取边构建最小生成树.如果直接从小到大按顺序选取,有可能形成了环,所以对环的处 ...

  9. 最小生成树的Kruskal算法实现

    最近在复习数据结构,所以想起了之前做的一个最小生成树算法.用Kruskal算法实现的,结合堆排序可以复习回顾数据结构.现在写出来与大家分享. 最小生成树算法思想:书上说的是在一给定的无向图G = (V ...

最新文章

  1. 「UI 测试自动化selenium」汇总
  2. 近期必读的5篇AI顶会CVPR 2020 GNN (图神经网络) 相关论文
  3. c++switch实现猜拳_策略模式+简单工厂+注解消除 if-else/switch-case
  4. 零基础学caffe源码 ReLU激活函数
  5. linux 添加动态链接库路径
  6. 统计《ASP.Net特供视频教程》总长度
  7. php匿名函数use,深入理解 PHP 匿名函数关键字 use 的 Runtime Context
  8. Mac系统下Homebrew的安装和使用Homebrew安装python
  9. python3下使用cv2.imwrite存储带有中文路径图片或者绝对路径图片
  10. java判断小数点后是否为0,是的话则取整,不是的话则保留
  11. Fiddler中文乱码解决方法
  12. Swift和Object-C的区别和优缺点
  13. 如何把视频语音转换成文字呢?
  14. flash 的鼠标事件详解
  15. 第一次向git.oschina.net提交项目
  16. Java EXCEL 表格导入导出(带下拉选-带VLOOKUP函数封装)
  17. android订单管理系统源码,生鲜o2o配送开源系统,包括Android源码+SSH后台管理系统...
  18. shell里的json超级工具 jq 高级用法介绍
  19. 一年中所有节日的排列顺序_【一年中的节日按时间顺序】时间顺序的春节风俗...
  20. 顺丰快递取件的产品流程bug,产品优化建议

热门文章

  1. npm install下载包的时候报4048rename的错误
  2. Elasticsearch7学习笔记(中)
  3. gitlab修改附件上传文件大小限制
  4. git push origin master和git push有什么区别
  5. 对于TGA格式文件的分析
  6. 黑马程序员——面向对象(1)
  7. json to excel java_java解析json生成excel
  8. 三维点云课程(六)——三维目标检测
  9. 三维目标检测--VoteNet增强版--MLCVNet论文解读
  10. 数组变换-Java-牛客模拟三