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

news2024/11/20 8:33:49

文章目录

  • 最小生成树(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.coloradmin.cn/o/1838159.html

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

相关文章

Linux中的文本编辑器vi与vim

摘要: 本文将深入探讨VI和VIM编辑器的基本概念、特点、使用方法以及它们在Linux环境中的重要性。通过对这两款强大的文本编辑器的详细分析,读者将能够更全面地理解它们的功能,并掌握如何有效地使用它们进行日常的文本编辑和处理任务。 引言&…

智慧之选:Vatee万腾平台,引领未来的创新引擎

在数字化浪潮席卷全球的今天,我们身处一个信息爆炸、技术革新的时代。在这样的大背景下,选择一个能够引领我们走向未来的平台显得尤为重要。而Vatee万腾平台,正是这样一个不容错过的智慧之选。 Vatee万腾平台,作为一个集创新、科技…

yolov8图像分割训练

1.背景 最近在做一个AI项目,需要用到yolov8的实例分割功能来确定一个不规则区域,从而找出不规则区域的坐标完成大致定位,以前有用过yolov8的目标检测功能,实际上yolov8的分割功能和检测功能大同小异。本博客将仔细分享使用yolov8图…

【C++提高编程-10】----C++ STL常用拷贝和替换算法

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

Intelij IDEA中Mapper.xml无法构建到资源目录的问题

问题场景: 在尝试把原本在eclipse上的Java Web项目转移至Intelij idea上时,在配置文件均与eclipse一致的情况下出现了如下报错: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.umbrella.crm_core.…

Ubuntu网络管理命令:route

安装Ubuntu桌面系统(虚拟机)_虚拟机安装ubuntu桌面版-CSDN博客 route命令与ifconfig命令都在net-tools软件包中,是一个传统的Linux路由管理命令。通过route命令可以显示和管理路由表。route命令的基本语法如下: route [options]…

尚硅谷爬虫学习第一天(3) 请求对象定制

#url的组成 #协议 http,https,一个安全,一个不安全。 #主机, 端口号 学过java 的肯定知道 沃日,以前面试运维的时候,问到主机地址,我懵逼了下,回了个8080 # 主机地址 80 # …

[Redis]持久化机制

众所周知,Redis是内存数据库,也就是把数据存在内存上,读写速度很快,但是,内存的数据容易丢失,为了数据的持久性,还得把数据存储到硬盘上 也就是说,内存有一份数据,硬盘也…

python是TIOBE编程语言排名第一的编程语言,它有什么优点?它的使用场景有哪些?用python打印数字1--100,用python打印九九乘法表怎么写?

Python是TIOBE编程语言排行榜排名第一的编程语言 。 python是一种解释性、交互式、面向对象的跨平台的语言。 python设计者及名称由来 Guido van Rossum 荷兰人---吉多范罗苏姆,是 Python 编程语言的最初设计者,在 Python 社区一直担当终身仁慈独裁者&…

【权威出版/投稿优惠】2024年水利水电与能源环境科学国际会议(WRHEES 2024)

2024 International Conference on Water Resources, Hydropower, Energy and Environmental Science 2024年水利水电与能源环境科学国际会议 【会议信息】 会议简称:WRHEES 2024 大会时间:点击查看 截稿时间:点击查看 大会地点:…

聊一聊大模型应用落地那些事

大模型并不神奇 很多人听到"大模型"这个词可能会觉得很神秘,其实,LLM 就是神经网络,只是很大的神经网络,相对传统神经网络,大就是它的特点。我们用一个压缩算法的简单例子来帮助理解这个巨大的神经网络。 …

.[nicetomeetyou@onionmail.org].faust深入剖析勒索病毒及防范策略

引言: 在数字化时代,网络安全问题日益凸显,其中勒索病毒无疑是近年来网络安全的重大威胁之一。勒索病毒以其独特的加密机制和恶意勒索行为,给个人和企业带来了巨大的经济损失和数据安全风险。本文将从勒索病毒的传播方式、攻击链、…

.net 6 api 修改URL为小写

我们创建的api项目,url是[Route(“[controller]”)],类似这样子定义的。我们的controller命名是大写字母开头的,显示在url很明显不是很好看(url不区分大小写)。转换方式: var builder WebApplication.Crea…

SpringBoot整合阿里云短信服务

文章目录 1. 准备工作2. 添加依赖3. 配置阿里云短信服务4. 创建配置类5. 创建服务类6.自定义异常7.使用服务类发送短信8.测试短信 1. 准备工作 注册阿里云账号:首先确保你有一个阿里云账号,并且已经开通了短信服务。获取AccessKey ID和AccessKey Secret…

奇怪的缓存一致性问题

天猫国际用户Push中心承接了国际用户触达相关的需求,比如短信、端内消息投放等等,并存在较高的并发场景。 该系统此前发现了一个查询投放计划plan为null的异常情况,在初期排查时有些丈二和尚摸不着头脑,后面突然灵光乍现——原来是…

探索线性回归模型

目录 一 线性回归的理论基础 什么是线性回归? 线性回归的假设 最小二乘法 二 线性回归的数学推导 线性回归参数的推导 多元线性回归 三 线性回归的模型构建 数据准备 训练模型 模型评估 四 线性回归的代码实现 基本实现 多元线性回归 五 线性回归的应用场景 预…

pygame游戏开发

Pygame游戏开发 pygame简介 模块库请参考:pygame官方文档 pygame可以用作游戏开发,但在商业游戏中真正的开发工具却不是pygame。使用pygame开发游戏周期长。 安装pygame 在pycharm中安装第三方库pygame: 在计算机中安装pygame&#xf…

C# OCCT Winform 界面搭建

目录 1.创建一个WInform项目 2.代码总览 代码解析 3.添加模型到场景 4.鼠标交互 1.创建一个WInform项目 2.代码总览 using Macad.Occt.Helper; using Macad.Occt; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Remoting.Co…

机器学习课程复习——支持向量机

支持向量机是一种二类分类模型。基本模型:定义在特征空间上的间隔最大的线性分类器模型升级:线性分类器+核技巧=非线性分类器学习策略:间隔最大化(可形式化为求解凸二次规划的问题;可等价于正则化的合页损失函数的最小化问题)学习算法:求解图二次规划的最优化算法支持向…

什么是Linux挂载

首先先说一下在Linux中一切皆文件(硬件设备也是文件),所有文件都是存放在以根目录为树形目录结构中;下面来说说一下什么是挂载 挂载:指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是…