数据结构--最小生成树

news2024/11/26 6:22:09

数据结构–最小生成树

连通图 \color{red}连通图 连通图的生成树是 包含图中全部顶点的一个极小连通子图 \color{red}包含图中全部顶点的一个极小连通子图 包含图中全部顶点的一个极小连通子图
若图中顶点数为n,则它的生成树含有 n-1 条边。对生成树而言,若砍去它的一条边,则会变成非连通
图,若加上一条边则会形成一个回路。

最⼩⽣成树(最⼩代价树)

道路规划要求:所有地⽅都连通,且成本尽可能的低 \color{red}道路规划要求:所有地⽅都连通,且成本尽可能的低 道路规划要求:所有地都连通,且成本尽可能的低

部分生成树:

对于⼀个 带权连通⽆向图 \color{red}带权连通⽆向图 带权连通向图G = (V, E),⽣成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。设R为G的所有⽣成树的集合,若T为R中 边的权值之和最⼩的⽣成树 \color{red}边的权值之和最⼩的⽣成树 边的权值之和最成树,则T称为G的 最⼩⽣成树( M i n i m u m − S p a n n i n g − T r e e , M S T )。 \color{red}最⼩⽣成树(Minimum-Spanning-Tree, MST)。 ⼩⽣成树(MinimumSpanningTree,MST)。

注:
• 最⼩⽣成树可能有多个,但边的权值之和总是唯⼀且最⼩的
• 最⼩⽣成树的边数 = 顶点数 - 1。砍掉⼀条则不连通,增加⼀条边则会出现回路
• 如果⼀个连通图本身就是⼀棵树,则其最⼩⽣成树就是它本身
• 只有连通图才有⽣成树,⾮连通图只有⽣成森林

Prim 算法(普⾥姆)

Prim 算法(普⾥姆):
从某⼀个顶点开始构建⽣成树;
每次将代价最⼩的新顶点纳⼊⽣成树,直到所有顶点都纳⼊为⽌。

对于这个图,用prim算法可以得到下面最小生成树:

注:最小生成树可能不唯一,可能存在多棵最小生成树

Kruskal 算法(克鲁斯卡尔)

Kruskal 算法(克鲁斯卡尔):
每次选择⼀条权值最⼩的边,使这条边的两头连通(原本已经连通的就不选)直到所有结点都连通

对于这个图,用Kruskal算法可以得到下面最小生成树:

判断是否属于同一个集合可以使用并查集算法实现 \color{purple}判断是否属于同一个集合可以使用并查集算法实现 判断是否属于同一个集合可以使用并查集算法实现

Prim 算法 v.s. Kruskal 算法

Prim 算法(普⾥姆):
从某⼀个顶点开始构建⽣成树;
每次将代价最⼩的新顶点纳⼊⽣成树,直到所有顶点都纳⼊为⽌。

时间复杂度: O ( ∣ V ∣ 2 ) O(|V|^2) O(V2)
适合⽤于边稠密图

Kruskal 算法(克鲁斯卡尔):
每次选择⼀条权值最⼩的边,使这条边的两头连通(原本已经连通的就不选)直到所有结点都连通

时间复杂度: O ( ∣ E ∣ l o g 2 ∣ E ∣ ) O( |E|log_2|E| ) O(Elog2E)
适合⽤于边稀疏图

代码与例题部分可以查看下面的文章: \color{green}代码与例题部分可以查看下面的文章: 代码与例题部分可以查看下面的文章:
最小生成树(Kruskal算法+Prim算法)简单讲解+最小生成树例题

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

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

相关文章

RFID技术助力半导体制造行业自动化生产

由于芯片短缺问题和近2年海运拥堵和成本上升等因素,致使全球资本对于芯片制造工厂的投入增大,而中兴、华为的例子已经凸显出国产半导体供应链的重要性,除去地缘政治上的意义,发展半导体其实是中国经济的转型的必走之路。 半导体生…

Vue2(生命周期,列表排序,计算属性和监听器)

目录 前言一,生命周期1.1,生命周期函数简介1.2,Vue的初始化流程1.3,Vue的更新流程1.4, Vue的销毁流程1.5, 回顾生命周期1.,6,代码演示1.6-1,beforeCreate1.6-2,created1.6-3&#xf…

雨水旋流过滤器、旋流雨水过滤器、水力旋流雨水过滤器、旋流分离器、旋流沉砂一体机、旋流沉砂井

产品组成 主要材料:PE304不锈钢 组成:过滤器筒体、桶盖、截止阀(选配)、不锈钢滤网 工作原理 雨水由过滤器进水口进入时,水流被引导沿过滤器内壁切线方向进入筒体。在水力、重力等作用下,形成雨水紧贴过…

【基础类】—前端算法类

一、排序 1. 排序方法列表 2. 常见排序方法 快速排序选择排序希尔排序 二、堆栈、队列、链表 堆栈、队列、链表 三、递归 递归 四、波兰式和逆波兰式 理论源码

Unity之ShaderGraph 节点介绍 Utility节点

Utility 逻辑All(所有分量都不为零,返回 true)Any(任何分量不为零,返回 true)And(A 和 B 均为 true)Branch(动态分支)Comparison(两个输入值 A 和…

wm8960没有声音

最近在imx6ull上调试这个声卡,用官方的镜像是能发声的,换到自己做的镜像上,就没有声音。 记录一下过程: 内核和设备树。只要有下面的显示,就说明加载成功。 再看一下aplay的显示 到此,驱动都是正常的。但…

每天一道leetcode:剑指 Offer 32 - II. 从上到下打印二叉树 II(适合初学者)

今日份题目: 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 示例 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], […

selenium常见等待机制及其特点和使用方法

目录 1、强制等待 2、隐式等待 3、显式等待 1、强制等待 强制等待是在程序中直接调用Thread.sleep(timeout) ,来完成的,该用法的优点是使用起来方便,语法也比较简单,缺点就是需要强制等待固定的时间,可能会造成测试的时间过…

APP外包开发的android开发模式

开发 Android 应用有多种方法,每种方法都有其优势和适用场景。综合考虑各自的特点,你可以根据项目的需求和团队的技能选择最合适的开发方法。今天和大家分享几种常见的开发方法以及它们之间的对比,希望对大家有所帮助。北京木奇移动技术有限公…

探索泛型与数据结构:解锁高效编程之道

文章目录 引言第一部分:了解泛型1.1 为什么使用泛型1.2 使用泛型的好处 第二部分:泛型的使用场景2.1 类的泛型2.2 方法的泛型2.3 接口的泛型 第三部分:泛型通配符3.1 通配符3.2 通配符的受限泛型 第四部分:数据结构和泛型的应用4.…

边缘计算框架 Baetyl v2.4.3 正式发布

导读Baetyl v2.4.3 版本已经发布,对 v2.3.0 版本的部分功能进行了升级优化。公告称,这些新功能继续遵循云原生理念,构建了一个开放、安全、可扩展、可控制的智能边缘计算平台。 Baetyl 项目由百度发起,基于百度天工 AIoT 智能边缘…

【LeetCode】数据结构题解(9)[复制带随机指针的链表]

复制带随机指针的链表 😉 1.题目来源👀2.题目描述🤔3.解题思路🥳4.代码展示 所属专栏:玩转数据结构题型❤️ 🚀 >博主首页:初阳785❤️ 🚀 >代码托管:chuyang785❤…

使用Pytest集成Allure生成漂亮的图形测试报告

目录 前言 依赖包安装 Pytest Allure Pytest Adaptor 改造基于Pytest的测试用例 生成测试报告 运行测试 生成测试报告 打开测试报告 资料获取方法 前言 之前写过一篇生成测试报告的博客,但是其实Allure首先是一个可以独立运行的测试报告生成框架&#xff…

(杭电多校)2023“钉耙编程”中国大学生算法设计超级联赛(6)

1001 Count 当k在区间(1n)/2的左边时,如图,[1,k]和[n-k1,n]完全相同,所以就m^(n-k) 当k在区间(1n)/2的右边时,如图,[1,n-k1]和[k,n]完全相同,所以也是m^(n-k) 别忘了特判,当k等于n时,n-k为0,然后a1a1,a2a2,..anan,所以没什么限制,那么就是m^n AC代码: #includ…

Vue3 大屏数字滚动效果

父组件&#xff1a; <template> <div class"homePage"> <NumRoll v-for"(v, i) in numberList" :key"i" :number"v"></NumRoll> </div> </template> <script setup> import { onMounted, r…

【Vue3】动态组件

动态组件的基本使用 动态组件&#xff08;Dynamic Components&#xff09;是一种在 Vue 中根据条件或用户输入来动态渲染不同组件的技术。 在 Vue 中使用动态组件&#xff0c;可以使用 元素&#xff0c;并通过 is 特性绑定一个组件的名称或组件对象。通过在父组件中改变 is 特…

C++ 虚析构函数

在C中&#xff0c;不能声明虚构造函数&#xff0c;但是可以声明虚析构函数。 析构函数没有类型&#xff0c;也没有参数&#xff0c;和普通成员函数相比&#xff0c;虚析构函数情况很简单。 虚析构函数的声明语法&#xff1a; virtual ~类名();如果一个类的析构函数是虚函数&…

Python自动化测试用例:如何优雅的完成Json格式数据断言

目录 前言 直接使用 优化 封装 小结 进阶 总结 资料获取方法 前言 记录Json断言在工作中的应用进阶。 直接使用 很早以前写过一篇博客&#xff0c;记录当时获取一个多级json中指定key的数据&#xff1a; #! /usr/bin/python # coding:utf-8 """ aut…

森海塞尔为 CUPRA 首款纯电轿跑 SUV – CUPRA Tavascan 注入音频魅力

森海塞尔为 CUPRA 首款纯电轿跑 SUV – CUPRA Tavascan 注入音频魅力 音频专家森海塞尔携手富有挑战精神的 CUPRA&#xff0c;雕琢时代新贵车型&#xff0c;打造畅快尽兴的驾驶体验 全球知名音频专家森海塞尔与以颠覆传统、充满激情、不甘现状而闻名的汽车品牌 CUPRA 展开合作…

awk案例练习

目录 一、awk练习 1.1筛选ip地址 1.2字段去重 1.3次数统计 1.4统计TCP连接状态 1.5处理字段缺失的数据 1.6筛选给定时间范围内的日志 一、awk练习 1.1筛选ip地址 ifconfig命令查看IP 利用awk进行筛选 ifconfig | awk BEGIN{RS""}NR2{print $6} RS指定输入记…