算法系列1之最小生成树

一.最小生成树

核心目标:

"连通所有顶点,总权值最小",连通无向网的核心问题)

先明确3个前提定义

生成树:对于连通无向图,包含图中所有

n个顶点和n-1条边的无环连通子图

删一条边则不连通,加一条边则成环

最小生成树:顾名思义是1:n关系

最小生成树(MST):在连通无向带权图(网)中,所有生成树中边的权值之和最小的生成树,称为最小生成树。

​ 核心需求:

用最少的"成本"(总权值),连接所有的"节点"(顶点),适用于"连通问题"(如修路、架线、网络布线)

属性

二.Kruskal算法(找边)

1.引申

由此算法引出最后一个图的存储结构 :

边集数组:

存储了边的两个端点及权值(多个顶点对组成的数组)

这里由邻接矩阵转换成边集数组形式

2.核心思想

贪心算法,查找局部边,并查集思想,符合条件的弄成同一父节点

3.步骤

首先把顶点的索引和边的权值存储在边集数组中

在将边集数组进行排序

三.Prim算法(找顶点)

1.核心思想

贪心思想,查找局部顶点

2.步骤

定义三大数组(各顶点边的权值数组,待激活节点数组,已访问数组),动态维护节点信息

以一个顶点为头,将关联顶点的边进行相关的操作

其次激活全部节点 : 利用假设法,找到最符合条件的边的关联顶点,在以该顶点进行操作

(找关联的各个顶点,找各个顶点里最符合条件的那个,激活本身节点)

四.代码

1.Kruskal代码

1.1要点

1.2代码

.h

.c

main.c

2.Prim代码

2.1要点

2.2代码

.h

.c

main.c

相关推荐
Promise微笑2 分钟前
算法对齐还是实战突围?解构GEO优化中方法论与实践的权重博弈
算法
米粒16 分钟前
力扣算法刷题 Day 29
算法·leetcode·职场和发展
wfbcg14 分钟前
每日算法练习:LeetCode 125. 验证回文串 ✅
算法·leetcode·职场和发展
We་ct15 分钟前
LeetCode 295. 数据流的中位数:双堆解法实战解析
开发语言·前端·数据结构·算法·leetcode·typescript·数据流
十年编程老舅17 分钟前
窥探内核心脏:深入解析 proc 虚拟文件系统
linux·服务器·数据库·c++·linux内核·文件系统·读写锁
Aaron158832 分钟前
RFSOC+VU13P/VU9P+GPU通用一体化硬件平台
人工智能·算法·fpga开发·硬件架构·硬件工程·信息与通信·基带工程
c++逐梦人42 分钟前
DFS剪枝与优化
算法·深度优先·剪枝
量化炼金 (CodeAlchemy)44 分钟前
【交易策略】基于随机森林的市场结构预测:机器学习在量化交易中的实战应用
算法·随机森林·机器学习
xiaoye-duck1 小时前
【C++:哈希表】从哈希冲突到负载因子:深入探索开放定址与链地址法的核心机密
数据结构·c++·散列表
coder_Eight1 小时前
LRU 缓存实现详解:双向链表 + 哈希表
前端·算法