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

文章目录

  • 最小生成树(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算法得到的最小生成树为:

在这里插入图片描述

全篇结束,感谢阅读!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DOOPRIME:日本央行7月加息与否取决于数据,购债规模调整无强烈信号

摘要 日本央行行长植田和男近日在议会发言中表示,7月份是否加息将取决于经济数据表现,而购买日本国债与加息是两个独立的问题,不会通过削减购债规模来释放强烈的政策信号。这一表态引发了市场的广泛关注,投资者和经济学家对此进行…

【elementui源码解析】如何实现自动渲染md文档-第四篇

目录 1.前言 2.md-loader - index.js 1)md.render() 2)定义变量 3)while stripTemplate stripScript genInlineComponentText 4)pageScript 5)return 6)demo-block 3.总结 所有章节&#x…

MyBatis逆向工程和MyBatisX插件的使用

文章目录 1.ORM思维2.逆向工程3.MyBatisX插件的使用 1.ORM思维 ORM(Object-Relational Mapping,对象-关系映射)是一种将数据库和面向对象编程语言中的对象之间进行转换的技术。它将对象和关系数据库的概念进行映射,最后我们就可以…

发生了什么?法国市值蒸发超1.8万亿元

KlipC报道:一周前,法国总统马克龙意外宣布提前举行国会议员选举,引发了法国政坛遭受巨震。仅仅一周内,法国股市遭受重大打击,其市值蒸发了约2580亿美元(约1.8万亿人民币)。 多家大型金融机构多…

【Go语言精进之路】构建高效Go程序:了解string实现原理并高效使用

🔥 个人主页:空白诗 🔥 热门专栏:【Go语言精进之路】 文章目录 引言一、Go语言的字符串类型1.1 字符串的定义1.2 字符串的零值可用1.3 字符串的不可变性1.4 字符串的拼接1.5 字符串的常用方法1.6 实际使用示例 二、字符串的内部表…

【Git】多人协作 -- 详解

一、多人协作(1) ⽬前,我们所完成的工作如下: 基本完成 Git 的所有本地库的相关操作,git 基本操作,分支理解,版本回退,冲突解决等等。 申请码云账号,将远端信息 clone…

【牛客面试必刷TOP101】Day33.BM70 兑换零钱(一)和BM71 最长上升子序列(一)

文章目录 前言一、BM70 兑换零钱(一)题目描述题目解析二、BM71 最长上升子序列(一)题目描述题目解析总结 前言 一、BM70 兑换零钱(一) 题目描述 描述: 给定数组arr,arr中所有的值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币…

数据安全未来之路,天空卫士荣誉领榜《中国数据安全50强(2024)》

《中国数据安全50强(2024)》 数世咨询首份《中国数据安全50强(2024)》报告发布。天空卫士凭借其卓越的技术创新、市场领导力、业务收入能力和企业发展能力,在众多竞争者中脱颖而出,荣登50强榜单&#xff0…

yolov5模型pt转engine

目录 1. 环境准备1.1 安装tensorrt1.1.1 pip安装1.1.2 压缩包安装 2. pt转engine 1. 环境准备 1.1 安装tensorrt 1.1.1 pip安装 pip install tensorrt 1.1.2 压缩包安装 很可能会失败,最保险的方法是下载tensorRT的压缩包,比如:下载Tenso…

分享:2024年(第12届)“泰迪杯”数据挖掘挑战赛省级奖项获奖名单公示

本次竞赛有评选省奖的省份有广东省、广西壮族自治区、河北省、湖北省。各省奖项依据“泰迪杯”全国评审专家组统一评阅的最终成绩区分省份后从高到低依序按比例产生。 广东省 省级奖项获奖名单公示 奖项设置: 一等奖:约占该省份队伍总数的5%&#xff0…

【正则表达式】入门

参考视频:10分钟快速掌握正则表达式_哔哩哔哩_bilibili 这个网站用来测试写的正则表达式效果:regex101: build, test, and debug regex 示例: 限定符 ? 表示前一个字符可有可无 比如这里输入:de? 匹配结果可以得到d和de * 前…

【Android WebView】WebView基础

一、简介 WebView是一个基于webkit引擎、展现web页面的控件。Android的Webview在低版本和高版本采用了不同的webkit版本内核,4.4后直接使用了Chrome。 二、重要类 以WebView类为基础,WebSettings、WebViewClient、WebChromeClient为辅助共同完成安卓段加…

微服务中的相关概念

Eureka Eureka 是由 Netflix 开发的一个服务发现和注册中心,广泛应用于微服务架构中。Eureka 主要用于管理和协调分布式服务的注册和发现,确保各个服务之间能够方便地找到并通信。它是 Netflix OSS(Netflix Open Source Software&#xff09…

指针和数组

同一指针相减的绝对值得到的是之间元素的个数 #include"stdio.h" #include"string.h" int main() {int arr[10]{0};printf("%d\n",&arr[9]- &arr[0]);return 0; } 不同类型的指针减去指针没有意义 地址加地址,指针加指针没…

UE5 C++ 跑酷游戏练习 Part1

一.修改第三人称模板的 Charactor 1.随鼠标将四处看的功能的输入注释掉。 void ARunGANCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) {// Set up action bindingsif (UEnhancedInputComponent* EnhancedInputComponent CastChecked&…

【Linux基础IO】常见的对文件操作的函数、文件描述符fd、访问文件的本质分析

目录 fopen函数 chdir函数 fclose函数 fwrite和fread函数 open函数 umask函数 write函数 read函数 close函数 文件描述符fd 进程访问文件的本质分析 fopen函数 参数mode: w方式打开文件:1、如果被打开文件不存在,系统会在使用fopen函…

玄机平台流量特征分析-常见攻击事

前言 熟悉常见的攻击流量特征,我们就可以通过主机的一个流量情况来判断主机遭受了何种攻击。这里来看看玄机平台的一道题目。 步骤1.1 这里需要我们找出恶意扫描者,也就是黑客的ip。下载好附件之后用wiresharke打开,直接筛选http协议的流量…

CSS【实战】抽屉动画

效果预览 技术要点 实现思路 元素固定布局(fixed)在窗口最右侧外部js 定时器改变元素的 right 属性,控制元素移入,移出 过渡动画 transition transition: 过渡的属性 过渡的持续时间 过渡时间函数 延迟时间此处改变的是 right …

C# Winform 侧边栏,切换不同页面

在项目中我们经常遇到需要在主界面上切换不同子页面的需求,常用做法是左侧显示子页面菜单,用户通过点击左侧菜单,实现右边子页面的展示。 实例项目实现: 项目左侧侧边栏实现FlowLayoutPanel使用显示不同子窗体 实例链接&#xf…

行业模板|DataEase应用平台对接大屏模板推荐

DataEase开源数据可视化分析工具于2022年6月发布模板市场(https://templates-de.fit2cloud.com),并于2024年1月新增适用于DataEase v2版本的模板分类。模板市场旨在为DataEase用户提供专业、美观、拿来即用的大屏模板,方便用户根据…