当前位置: 首页 > news >正文

数据结构:最小生成树

1.基本概念

  • 生成树:连通无向图的生成树是包含图中所有顶点的极小连通子图(无环)。

  • 最小生成树:所有生成树中边权重总和最小的那棵。

2.常用算法

克鲁斯卡尔算法(Kruskal)
  1. 步骤

    • 将所有边按权重升序排序。

    • 依次选择边,若其连接两个不同连通分量(不形成环),则加入生成树。

    • 使用并查集(Union-Find)高效管理连通性。

  2. 时间复杂度:O(E log E)(排序和并查集操作)。

  3. 适用场景:稀疏图(边较少)。

普里姆算法(Prim)
  1. 步骤

    • 从任一顶点开始,逐步扩展。

    • 每次选择连接已选顶点集和未选顶点集的最小权重边。

    • 使用优先队列(如堆)维护候选边。

  2. 时间复杂度

    • 二叉堆:O(E log V)

    • 斐波那契堆:O(E + V log V)(更优)。

  3. 适用场景:稠密图(边较多)。

3.具体例子:

假设有一个无向图,包含 4个顶点(A, B, C, D) 和 6条边,权重如下:

  • AB: 权重 1

  • AC: 权重 3

  • AD: 权重 4

  • BC: 权重 2

  • BD: 权重 5

  • CD: 权重 6

目标:找到该图的最小生成树(总权重最小)。

1. 克鲁斯卡尔算法(Kruskal)示例

步骤
  1. 按权重升序排序所有边

AB(1) → BC(2) → AC(3) → AD(4) → BD(5) → CD(6)
  1. 初始化并查集:每个顶点自成一个集合。

  2. 依次选择边并检查是否形成环

    • 选择 AB(1):连接 A 和 B(不同集合),合并集合。
      已选边:AB(1)
      总权重:1
      顶点集合:{A, B}, {C}, {D}

    • 选择 BC(2):连接 B 和 C(不同集合),合并集合。
      已选边:AB(1), BC(2)
      总权重:1+2=3
      顶点集合:{A, B, C}, {D}

    • 选择 AC(3):A 和 C 已属于同一集合(形成环),跳过。

    • 选择 AD(4):连接 A 和 D(不同集合),合并集合。
      已选边:AB(1), BC(2), AD(4)
      总权重:1+2+4=7
      顶点集合:{A, B, C, D}(所有顶点连通)

    • 此时已选 3 条边(V-1=3),算法终止

最终最小生成树
A — B (1)
B — C (2)
A — D (4)

2. 普里姆算法(Prim)示例

步骤
  1. 从顶点 A 开始,初始化优先队列(最小堆)。

  2. 逐步扩展生成树

    • 初始状态:已访问顶点 {A},候选边为 A 的邻边 AB(1)、AC(3)、AD(4)。
      优先队列:AB(1), AC(3), AD(4)

    • 选择 AB(1):连接 A 和 B,标记 B 为已访问。
      已选边:AB(1)
      总权重:1
      候选边更新:添加 B 的邻边 BC(2)、BD(5)。
      优先队列:BC(2), AC(3), AD(4), BD(5)

    • 选择 BC(2):连接 B 和 C,标记 C 为已访问。
      已选边:AB(1), BC(2)
      总权重:1+2=3
      候选边更新:添加 C 的邻边 CD(6)。
      优先队列:AC(3), AD(4), BD(5), CD(6)

    • 选择 AC(3):A 和 C 已连通(C 已访问),跳过。

    • 选择 AD(4):连接 A 和 D,标记 D 为已访问。
      已选边:AB(1), BC(2), AD(4)
      总权重:1+2+4=7
      所有顶点已访问,算法终止

最终最小生成树
A — B (1)
B — C (2)
A — D (4)

关键结论

  • 克鲁斯卡尔:按边权重排序,逐步合并不连通的子树。

  • 普里姆:从起点扩展,每次选择连接已访问和未访问顶点的最小边。

  • 两种算法结果相同:因为示例图权重唯一,生成的最小生成树唯一。

相关文章:

数据结构:最小生成树

1.基本概念 生成树:连通无向图的生成树是包含图中所有顶点的极小连通子图(无环)。 最小生成树:所有生成树中边权重总和最小的那棵。 2.常用算法 克鲁斯卡尔算法(Kruskal) 步骤: 将所有边按权…...

C语言-章节 4:函数的定义与声明 ——「神秘法术的卷轴」

少年和 Inta 成功通过运算符与表达式的考验后,继续在函数城堡中探索。他们沿着一条闪烁着幽光的走廊前行,走廊两侧的墙壁上刻满了奇异的符号,仿佛在诉说着古老的编程秘密。终于,他们来到了一间神秘的房间,房间中央悬浮…...

《云原生安全攻防》-- K8s镜像安全:镜像全生命周期安全管理

从攻击者的角度来看,针对容器镜像的软件供应链攻击和镜像投毒等攻击方式,不仅攻击成本低,而且还能带来更高且持久的收益。因此,镜像安全问题变得日益突出。 在本节课程中,我们将深入探讨镜像全生命周期的安全管理&…...

uniapp商城之首页模块

文章目录 前言一、自定义导航栏1.静态结构2.修改页面配置3.组件安全区适配二、通用轮播组件1. 静态结构组件2.自动导入全局组件3.首页轮播图数据获取三、首页分类1.静态结构2.首页获取分类数据并渲染四、热门推荐1.静态结构2.首页获取推荐数据并渲染3.首页跳转详细推荐页五、猜…...

【Javascript Day13、14、15、16】

html的DOM操作 // JS 是为了让页面实现动态网页效果 // 动态和静态区分取决于JS的和页面标签的数据交互 // 动态网页:有数据交互 // 静态网页:无数据交互 // JS 和 元素的关联操作对象 DOM // 整个HT…...

linux 板子的wifi模块连上路由器后,用udhcpc给板子wifi分配ip,udhcpc获取到ip,但没有写入wlan0网卡上

linux 板子的wifi模块连上路由器后,用udhcpc给板子wifi分配ip,udhcpc获取到ip,但没有写入wlan0网卡上 这里的问题是 /usr/share/udhcpc/default.script脚本有问题 用下面正确脚本,即可写进去 #!/bin/sh# udhcpc script for busybox # Copyr…...

openGauss 3.0 数据库在线实训课程13: 学习逻辑结构:表管理1

前提 我正在参加21天养成好习惯| 第二届openGauss每日一练活动 课程详见:openGauss 3.0.0数据库在线实训课程 学习目标 学习openGauss表的创建、搜索路径和访问方法等 课程作业 1.创建一个表(默认,不指定模式),查…...

网络编程-

文章目录 网络编程套接字UDP/TCP的api使用 网络编程套接字 socket,是操作系统给应用程序(传输层给应用层)提供的api,Java也对这个api进行了封装。 socket提供了两组不同的api,UDP有一套,TCP有一套&#x…...

基于单片机的常规肺活量SVC简单计算

常规肺活量 SVC(Slow Vital Capacity)是指尽力吸气后缓慢而又完全呼出的最大气量。 成年男性的肺活量通常在 3500-4000ml 之间,成年女性的肺活量通常在 2500-3000ml 之间。 单片机一般通过外接流量传感器,使用ADC高速采集的方式…...

【PostgreSQL】PG在windows下的安装

一、准备 通过官网下载安装文件,官方下载路径如下: https://www.postgresql.org/download/windows/ 二、安装 双击postgresql-17.3-1-windows-x64.exe文件,启动安装,进入安装步骤,点击Next 选择PG安装路径&#xff…...

电动汽车电池监测平台系统设计(论文+源码+图纸)

1总体设计 本次基于单片机的电池监测平台系统设计,其整个系统架构如图2.1所示,其采用STC89C52单片机作为控制器,结合ACS712电流传感器、TLC1543模数转换器、LCD液晶、DS18B20温度传感器构成整个系统,在功能上可以实现电压、电流、…...

基于和声搜索(Harmony Search, HS)的多中心点选址优化算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于和声搜索(Harmony Search, HS)的多中心点选址优化算法matlab仿真。可以设置多个不同的中心点。 2.测试软件版本以及运行结果展示 matlab2022a/matlab2024b版…...

单链表的概念,结构和优缺点

1. 概念 链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 2. 单链表的结构 单链表是由一系列节点组成的线性结构,每个结点包含两个域。:数据域和指针域。 数据域用来…...

SpringBoot+数据可视化的奶茶点单购物平台(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统介绍 本奶茶点单购物平台搭建在 Spring Boot 框架之上,充分利用其强大的依赖管理机…...

深入理解 Vue3 中 ref 与 reactive 的区别及应用

深入理解 Vue3 中 ref 与 reactive 的区别及应用 在 Vue3 的开发世界里,响应式编程是其核心特性之一,而ref与reactive作为实现响应式的关键 API,理解它们的区别和适用场景对于开发者来说至关重要。本文将带你深入剖析这两个 API,…...

TDengine 客户端连接工具 taos-Cli

简介工具获取运行命令行参数 基础参数高级参数 数据导出/导入 数据导出数据导入 执行 SQL 脚本使用小技巧 TAB 键自动补全设置字符列显示宽度其它 错误代码表 简介 TDengine 命令行工具(以下简称 TDengine CLI)是用户操作 TDengine 实例并与之交互最简…...

Linux(ubuntu)下载ollama速度慢解决办法

国内安装Ollama都很慢,因为一直卡在下载中,直接通过官网的链接地址下载方法: curl -fsSL https://ollama.com/install.sh | sh速度大概是10min下载1%,完全不能接受啊! 其中很好的一个加速方式是通过使用github文件加速…...

Mac安装JD-GUI

Mac安装反编译工具步骤如下: 打开官网https://java-decompiler.github.io/ 选择下载mac的安装包解压下载好的压缩包,点击JD-GUI安装 有可能会遇到如下错误。请先检查是否安装JDK,通过java -version命令查看是否是1.8版本的jdk如果jdk没问题&…...

Jenkins 配置 Git Parameter 四

Jenkins 配置 Git Parameter 四 一、开启 项目参数设置 勾选 This project is parameterised 二、添加 Git Parameter 如果此处不显示 Git Parameter 说明 Jenkins 还没有安装 Git Parameter plugin 插件,请先安装插件 Jenkins 安装插件 三、设置基本参数 点击…...

【AI】Docker中快速部署Ollama并安装DeepSeek-R1模型: 一步步指南

【AI】Docker中快速部署Ollama并安装DeepSeek-R1模型: 一步步指南 一、前言 为了确保在 Docker 环境中顺利安装并高效运行 Ollama 以及 DeepSeek 离线模型,本文将详细介绍整个过程,涵盖从基础安装到优化配置等各个方面。通过对关键参数和配置的深入理解…...

Cursor 使用秘籍:提升编程效率的必备规则

我的 Cursor 编程设计实践:高效构建优质代码 在代码架构设计与开发实践中,我严格遵循以下准则,以确保代码的高质量、可维护性和可扩展性,可以将以下的规则复制到Cursor的User Rules中:一、架构分析与模块设计阶段 第一…...

130+现代C++代码示例解析:从C++11到C++23的终极学习指南

130现代C代码示例解析:从C11到C23的终极学习指南 【免费下载链接】modern-cpp-features A cheatsheet of modern C language and library features. 项目地址: https://gitcode.com/gh_mirrors/mo/modern-cpp-features 现代C代码示例是一份全面的C特性速查手…...

g2800,g2810,mp3620,ix6780,ts6120,E618,TS3380,TS3340,X6800,iB4180报错5B00,P07,E08,1700,5b04废墨垫清零,亲测有用。

下载:点这里下载 备用下载:https://pan.baidu.com/s/1WrPFvdV8sq-qI3_NgO2EvA?pwd0000 常见型号如下: G系列 G1000、G1100、G1200、G1400、G1500、G1800、G1900、G1010、G1110、G1120、G1410、G1420、G1411、G1510、G1520、G1810、G1820、…...

终极指南:如何用WaveTools快速管理多个鸣潮游戏账号

终极指南:如何用WaveTools快速管理多个鸣潮游戏账号 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 如果你是一位鸣潮玩家,同时拥有多个游戏账号,那么你一定经历过频繁登…...

告别低效重复:ChatGPT 5.5 + GPT Image 2 重塑开发者工作流

摘要: 在 2026 年的今天,开发者的工作流正在经历一场静默的革命。本文将通过实测案例,展示如何利用 ChatGPT 5.5 的代码理解能力与 GPT Image 2 的视觉生成能力,结合 VS Code 插件与 API 调用,实现从架构设计、代码生成…...

Windows 11中文输入法失效与Edge卸载难题的精准修复方案

1. 项目概述与核心痛点解析如果你是一名长期在Windows 11环境下工作的开发者或文字工作者,特别是习惯使用VS Code、Cursor这类基于Chromium的编辑器,或者深度依赖命令行工具,那么你很可能遭遇过一个令人抓狂的问题:在特定的输入框…...

2026年AI大模型API中转系统揭秘:5款主流服务性能横评与接入实战指南

在2026年的AI应用开发领域,架构师面临的一大挑战是,怎样在确保高并发、低延迟的情况下,稳定接入GPT - 5.4、Claude 4.7、Gemini 3.1 Pro等顶级大模型。无论是搭建企业级Agent集群,还是开发实时多模态交互系统(如语音助…...

vue基于springboot的房屋租赁续租系统的设计与实现

目录同行可拿货,招校园代理 ,本人源头供货商功能模块划分续租业务流程系统支撑功能技术实现要点扩展性设计项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块划分 用户管理模块 …...

怎么把DNG图片批量转换成JPG格式

DNG格式是 Adobe 公司开发的‌通用 RAW 图像格式‌。‌一般的电脑或者手机不支持直接阅读,并且给别人看的话也不太方便。那么如何把dng格式的图片转换成jpg或者png格式呢?第一步:浏览器打开星喵工具,找到里面的 DNG转JPG 的功能。…...

新手吉他弦距与按弦力度分析:法雅特梵高日记测评

零基础学吉他?先别急着买,听我说完 学吉他这件事,90%的人会在前三个月放弃。 不是因为不够热爱,而是因为第一把琴没选对。 我见过太多人兴致勃勃买了把吉他,结果弦距高到按不下去、手指磨出血泡、每次练琴像上刑——然…...