Kruskal 算法介绍

这篇具有很好参考价值的文章主要介绍了Kruskal 算法介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一 点睛

构造最小生成树还有一种算法,即 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)是无向连通带权图。

Kruskal 算法介绍

1 初始化

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

Kruskal 算法介绍

2 找最小

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

3 合并

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

Kruskal 算法介绍

4 找最小

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

5 合并

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

Kruskal 算法介绍

6 找最小

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

7 合并

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

Kruskal 算法介绍

8 找最小

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

9 合并

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

Kruskal 算法介绍

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.如下图所示。

Kruskal 算法介绍

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.如下图所示。

Kruskal 算法介绍文章来源地址https://www.toymoban.com/news/detail-446325.html

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

到了这里,关于Kruskal 算法介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 859. Kruskal算法求最小生成树

    给定一个 nn 个点 mm 条边的无向图,图中可能存在重边和自环,边权可能为负数。 求最小生成树的树边权重之和,如果最小生成树不存在则输出  impossible 。 给定一张边带权的无向图 G=(V,E)G=(V,E),其中 VV 表示图中点的集合,EE 表示图中边的集合,n=|V|n=|V|,m=|E|m=|E|。 由

    2023年04月09日
    浏览(39)
  • 图的最小生成树-Kruskal算法

    目录 问题引入  程序设计  程序分析 本节文章 【问题描述】 编写程序,利用带权无向图的邻接矩阵存储,实现图的最小生成树Kruskal算法。

    2024年02月08日
    浏览(57)
  • 最小生成树算法之Kruskal算法(c++)

    与Prim算法生成图的最小生成的树算法不同在于: Prim算法是基于图中的顶点的,且不依赖于边,Prim从顶点出发拓展,依次找每个顶点相邻的权值最小的边,直至生成最小生成树。因此,Prim算法的时间复杂度是O(v^2),适合边稠密图。 而Kruskal算法恰恰相反,是基于图中的边的一

    2024年02月12日
    浏览(42)
  • 最小生成树(Prim算法与Kruskal算法)

    一个连通图的生成树是一个极小的连通子图,它含有图中全部的n个顶点,但只有足以构成一棵树的n-1条边。我们把构造连通网的最小代价生成树称为最小生成树。 例如下图中①、②、③都是左侧图的生成树,但③是构造连通网的最小代价,所以③是该图的最小生成树。 P

    2024年02月05日
    浏览(57)
  • 最小生成树—Kruskal算法和Prim算法

    连通图:在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1与顶点v2是连通的。如果图中任 意一对顶点都是连通的,则称此图为连通图。 生成树:一个连通图的最小连通子图称作该图的生成树。有n个顶点的连通图的生成树有n个顶点 和n-1条边。 最小生成树:构成生成树的

    2024年02月05日
    浏览(46)
  • 最小(代价)生成树—Prim算法与Kruskal算法

    目录  一、最小生成树的特点 二、最小生成树算法  ① Prim(普里姆)算法 ②Kruskal(克鲁斯卡尔)算法  ③Prim算法与Kruskal算法对比 最小生成树是带权连通图G=(V,E)的生成树中边的权值之和最小的那棵生成树。它具有以下特点: 图G中各边权值互不相等时有唯一的最小生成树。图

    2024年02月01日
    浏览(36)
  • 图论13-最小生成树-Kruskal算法+Prim算法

    基本思想:按照权值从小到大的顺序选择 n-1 条边,并保证这 n-1 条边不构成回路 具体做法:首先构造一个只含 n 个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森林中 不产生 回路,直至森林变成一棵树为止。 2.2.1 如果图不联通,直接返回空,该

    2024年02月01日
    浏览(46)
  • 最小生成树Kruskal、Prim算法C++

    连通图: 在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1和顶点v2是连通的。如果图中任意一对顶点都是连通的,则称此图为连通图。 生成树: 一个连通图的最小连通子图称作为图的生成树。有 n个顶点 的连通图的生成树有 n个顶点和 n-1 条边。 最小生成树: 最小生活

    2024年02月10日
    浏览(39)
  • 最小生成树matlab代码Kruskal算法,用于二维网络生成

    一、 Kruskal算法         克鲁斯卡尔算法(Kruskal)是一种使用贪婪方法的最小生成树算法。 该算法初始将图视为森林,图中的每一个顶点视为一棵单独的树。 一棵树只与它的邻接顶点中权值最小且不违反最小生成树属性(不构成环)的树之间建立连边。 二、具体效果   最

    2024年02月13日
    浏览(50)
  • 【最小生成树】一文学懂prim、kruskal算法

    博主简介: 努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:算法、数据结构、Java等相关知识。 博主主页: @是瑶瑶子啦 所属专栏: 算法 ;该专栏专注于蓝桥杯和ACM等算法竞赛🔥 近期目标: 写好专栏的每一篇文章 首先,我们要了解什么是最小生

    2023年04月25日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包