数据结构--最小生成树

  1. 基本概念

• 生成树:无向连通图 G 的一个子图,包含 G 的全部顶点,且是连通的无环子图,边数为 n-1(n 为顶点数)。

• 最小生成树(MST):在带权无向连通图中,所有生成树中权值总和最小的生成树。

• 核心性质:一个图可以有多棵最小生成树,但权值总和相等; MST 不唯一的情况出现在图中存在多条权值相同的边时。

  1. 经典构造算法

2.1 Prim 算法(加点法)

  1. 初始化:任选一个顶点作为起始点,加入 MST 集合;初始化一个数组记录各顶点到 MST 集合的最小权值。

  2. 选择顶点:在未加入 MST 的顶点中,选取 到 MST 集合权值最小的顶点 u,将 u 加入 MST 集合。

  3. 更新权值:遍历顶点 u 的所有邻接顶点,若该顶点未加入 MST,且其到 u 的权值小于当前记录的最小权值,则更新权值。

  4. 重复步骤 2、3:直到所有顶点都加入 MST 集合。

• 适用场景:稠密图,时间复杂度主要取决于顶点数,适合顶点少、边多的图。

2.2 Kruskal 算法(加边法)

  1. 初始化:将图中所有边按 权值从小到大 排序;初始化每个顶点为一个独立的连通分量。

  2. 选择边:依次选取权值最小的边,判断该边的两个顶点是否属于 不同的连通分量。

  3. 合并分量:若属于不同分量,则将该边加入 MST 集合,并合并这两个连通分量;若属于同一分量,则舍弃该边(避免形成环)。

  4. 重复步骤 2、3:直到 MST 集合中包含 n-1 条边(n 为顶点数)。

• 适用场景:稀疏图,时间复杂度主要取决于边数,适合顶点多、边少的图。

  1. 核心定理

• 切分定理:将图的顶点集划分为两个非空子集 S 和 V-S(称为一个切分),若边 e 是这个切分的横切边(两个端点分别在 S 和 V-S 中),且 e 的权值是所有横切边中最小的,则 e 必属于 MST。

• 两个算法均基于切分定理:Prim 算法每次扩展顶点集对应一个切分,Kruskal 算法每次选最小边也满足切分最小横切边条件。

  1. 注意事项

• 最小生成树仅适用于 无向连通带权图,非连通图不存在生成树。

• 两种算法都能保证得到最小生成树,选择依据是图的稠密程度。

相关推荐
CSharp精选营4 天前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
RainCity4 天前
Java Swing 自定义组件库分享(十二)
java·笔记·后端
刘马想放假7 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
北域码匠8 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
LinXunFeng11 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
Darling噜啦啦15 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠16 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾16 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
闪闪发亮的小星星16 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq16 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息