【数据结构与算法】最小生成树

文章目录

  • 最小生成树(MST)
    • 定义
  • 构造最小生成树
    • Prim算法
    • Kruskal算法

最小生成树(MST)

连通图的生成树包含图的所有顶点,并且只含有尽可能少的边。对于生成树来说,若砍去它的一条边,则会使生成树变成非连通图;若给它增加一条边,则会形成图中的一条回路。

例如:

G
2
1
3
4
A
B
C
D

它的生成树可以是:

G1
2
1
3
A
B
C
D

也可以是

G2
1
3
4
A
B
C
D

定义

对于一个带权连通无向图G来说,生成树不同,每棵树的权(树中所有边上的权值之和)也不同。权值之和最小的那棵生成树称为G的最小生成树(Minimum-Spanning-Tree,MST)。

例如,上文中,G1是G的最小生成树。

不难看出,最小生成树具有以下性质:

  1. 若图G中存在权值相同的边,则G的最小生成树可能不唯一。当图G中的各边权值互不相等时,最小生成树是唯一的。
  2. 若无向连通图G的边数比定点数少1,则G的最小生成树就是它本身。
  3. 虽然图G最小生成树可能不唯一,但权值之和总是唯一的,而且是最小的。
  4. 最小生成树的边数为顶点树减1

构造最小生成树

构造最小生成树的方法有很多,但大多都使用了贪心思维,其中最典型的就是Prim算法和Kruskal算法。

(由于考研对这部分代码的要求并不高,因此实现代码略过)

Prim算法

Prim算法的核心是选择与已构造的生成树连接的权值最小、未被选择过的且另一端结点不在生成树内的边加入到已构造的生成树中。

例如:

在这里插入图片描述

假设我们以1为起点进行构造。

那么我们将1作为已构造的最小生成树。

第一次:选择与1连接的最小的边,有1–2

在这里插入图片描述

第二次,选择与{1,2}连接的最小的边,有2–4

在这里插入图片描述

第三次,选择与{1,2,4}连接的最小的边,有4–7

在这里插入图片描述

第四次,选择与{1,2,4,7}连接的最小的边,有7–6

在这里插入图片描述

第五次,选择与{1,2,4,7,6}连接的最小的边,有6–3

在这里插入图片描述

第六次,选择与{1,2,4,7,6,3}连接的最小的边,有4–5

在这里插入图片描述

第七次,选择与{1,2,4,7,6,3,5}连接的最小的边,有5–8

在这里插入图片描述

所以根据Prim算法得到的最小生成树为:

在这里插入图片描述

Kruskal算法

Kruskal算法的核心是每次选择权值最小的、未被选择过的且两端结点属于两个不同的集合的边。

例如:

在这里插入图片描述

第一次:选择权值最小的、未被选择的且两端属于不同集合的边,有5–8

在这里插入图片描述

第二次,选择权值最小的、未被选择的且两端属于不同集合的边,有2–4

在这里插入图片描述

第三次,选择权值最小的、未被选择的且两端属于不同集合的边,有3–6

在这里插入图片描述

第四次,选择权值最小的、未被选择的且两端属于不同集合的边,有,4–7

在这里插入图片描述

第五次,选择权值最小的、未被选择的且两端属于不同集合的边,有7–6

在这里插入图片描述

第六次,选择权值最小的、未被选择的且两端属于不同集合的边,有1–2

在这里插入图片描述

第七次,选择权值最小的、未被选择的且两端属于不同集合的边,有4–5

在这里插入图片描述

所以根据Prim算法得到的最小生成树为:

在这里插入图片描述

全篇结束,感谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/29456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

练习时长 1 年 2 个月的 Java 菜鸡练习生最近面经,期望25K

面经哥只做互联网社招面试经历分享,关注我,每日推送精选面经,面试前,先找面经哥 自我介绍:本人是练习时长 1 年 2 个月的 Java 后端菜鸡练习生。下面是我最近面试的面经: 百度 一面 约1h时间:2…

MySQL常见面试题自测

文章目录 MySQL基础架构一、说说 MySQL 的架构?二、一条 SQL语句在MySQL中的执行过程 MySQL存储引擎一、MySQL 提供了哪些存储引擎?二、MySQL 存储引擎架构了解吗?三、MyISAM 和 InnoDB 的区别? MySQL 事务一、何谓事务&#xff1…

Python类的优势及应用场景深度分析(代码封装与组织、继承与代码复用、多态与接口、状态管理与行为封装)(python class)

文章目录 Python 类的优势及应用场景深度分析1. 代码封装与组织1.1 封装性示例代码:用户账户管理 1.2 组织性 2. 继承与代码复用2.1 继承性示例代码:员工管理系统 3. 多态与接口3.1 多态性示例代码:图形渲染 4. 状态管理与行为的封装4.1 状态…

黄仁勋加州理工毕业典礼演讲:人工智能是我们这个时代最重要的技术

英伟达公司首席执行官黄仁勋周五(6月14日)在加州理工学院(Caltech)毕业典礼上发表演讲,鼓励毕业生在逆境中努力,不断寻求新的机遇。 黄说,加州理工学院因其毕业生受人尊敬而闻名,如…

【耐水好】强耐水UV胶水主要重视什么?

【耐水好】强耐水UV胶水主要重视什么? 应用性方面: 强耐水UV胶水主要重视以下几个方面: 耐水性:强耐水UV胶水经过精心调配和改良,以提供出色的耐水性能。这种胶水能够形成防水层,有效防止水分渗入并保护被…

ISCC2024 WriteUpReverse 迷失之门

Reverse 迷失之门 迷失之门 writeup解题思路 打开题目是一个压缩包解压后是一个.exe程序 按照做题顺序第一步查壳发现并没有壳将其拖入ida中进行查看 使用shiftF12进行字符串查看 发现flag字符了我们双击它 将光标移动到yes哪里右击空白地方打开交叉索引并按F5进行反汇编发现…

6月18日(周二)A股行总结:A股震荡收涨,车路云概念全日强势,10年、30年国债期货齐创新高

车路云概念股发力上涨,中海达、华铭智能等多股20CM涨停。半导体板块走强,中芯国际港股上涨近3% 。白酒板块下跌,贵州茅台跌1.3% 。30年期及10年期国债期货主力合约均创上市以来新高。 周二,A股全日窄幅震荡 沪指收涨0…

IEEE 期刊、会议论文模板下载网站(TNNLS)

这是网址:IEEE-Template Selector. 1 现在TNNLS匿名 需要专用模板,如果不用会退回 2 选会刊(trans),期刊(journal),快报(letters)会议(conferenc…

封装分发安装教程

【安装环境】 Linux伪静态 PHP7.1mysql5.6 SSL 证书 (使用宝塔) 1、在宝塔上面新建站点,把压缩包上传到根目录,解压出来,然后导入 sql 数据库文件,再 然后修改数据库配置 source\system\db_config.php 2、…

一图看懂华为云CodeArts API 7大特性,带你玩转一站式API

华为云CodeArts API是API全生命周期一体化协作平台 ,支持开发者高效实现API设计、API开发、API测试、API托管、API运维、API变现的一站式体验。以API契约为锚点,CodeArts API保证了API各阶段数据高度一致,为开发者提供友好易用的API全流程端到…

基于Matlab的细胞计数图像处理系统(GUI界面有报告) 【含Matlab源码 MX_003期】

简介: 本文旨在解决生物血细胞数目统计的挑战,提出了基于图像处理的综合方案。通过MATLAB平台,我们设计并实现了一套完整的细胞图像处理与分析流程。在预处理阶段,采用图像增强和阈值分割等方法,有效地提高了细胞图像的…

SQL学习,大厂面试真题(1):观看各个视频的平均完播率

各个视频的平均完播率 1、视频信息表 IDAuthorNameCategoryAgeStart Time1张三影视302024-01-01 7:00:002李四美食602024-01-01 7:00:003王麻子旅游902024-01-01 7:00:00 (video_id-视频ID, AuthorName-创作者, tag-类别标签, duration-视频时长(秒&…

六、在Qt下通过PCL在VTK9.3.0下显示自己的pcd点云文件

前几天刚整理好VTK8.2.0,发现我们的项目使用的PCL自带的VTK是9.3.0的,脸黑了快 VTK8.2.0可参考该篇博文:五、在Qt下加载QVTKWidget控件(VTK8.2.0),生成Visual Studio项目,显示点云(C…

玩转nRF52840-DK开发套件 (5) RTT打印调试日志

一、两种日志信息的输出方式 日志信息输出可以方便调试者观察程序运行状态,通常用串口 printf 来输出日志。nRF52840-DK也可以用仿真器 JLink 的 RTT Viewer 输出方式。 二、SDK_config.h配置 勾选相关项: 三、SDK_config.h配置 在主函数 main 中&#x…

Ubuntu,Centos,Linux服务器安装Mellanox MCX653105A IB网卡HCA卡驱动

Mellanox 官方驱动下载地址 https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/ 选择对应操作系统 官方链接速度比较慢,推荐个友商的下载地址 https://support.xfusion.com/support/#/zh/rack-servers/2288h-v5-pid-21872244/software …

R语言数据分析案例31-运用差分整合移动平均自回归模型对世界主要国家(俄罗斯)的污染物排放量进行研究预测

一、研究背景与意义 空气污染导致的环境恶化已经成为世界各国许多国家和地区发展受限的重要原因。空气污染物是由气态物质、挥发性物质、半挥发性物质和颗粒物质的混合物造成的,其中典型 的空气污染物就是人们生活中经常使用到的高频词汇雾霾。本文主要对其中的污染…

AI发展面临的问题? —— AI对创造的重新定义

一、AI的问题描述 AI与数据安全问题:随着AI技术的发展和应用,数据安全问题日益突出。AI模型训练依赖于大量数据,而这些数据中可能包含个人隐私、商业秘密等敏感信息。如果数据在采集、存储、使用过程中处理不当,可能导致数据泄露或…

Vue3 状态管理 - Pinia,超详细讲解!

前言: 哈喽,大家好,我是前端菜鸟的自我修养!今天给大家分享【Vue3 状态管理 - Pinia】,超详细讲解!并提供具体代码帮助大家深入理解,彻底掌握!原创不易,如果能帮助到带大…

Spring Security——添加验证码

目录 项目总结 新建一个SpringBoot项目 VerifyCode(生成验证码的工具类) WebSecurityController控制器 VerifyCodeFilter(自定义过滤器) WebSecurityConfig配置类 login.html登录页面 项目测试 本项目是以上一篇文章的项目…

由GetSymbol说起,安全研究员定向水坑技战法梳理

0x00 概述 最近,一款开源的调试符号下载工具GetSymbol被发现存在后门,允许攻击者下发执行恶意代码。谷歌TAG声称,攻击者目前正在积极利用至少一个0Day漏洞来针对安全研究人员。 近年来,针对安全研究人员的定向水坑和社工攻击屡见…