6.6 数据结构——最小生成树

本文介绍了图的生成树概念,强调其特征,包括顶点数量、边的数量以及形成回路的条件。接着,定义了最小生成树,即权值之和最小的生成树,并探讨了构造最小生成树的普里姆和克鲁斯卡尔算法。普里姆算法从顶点开始扩展,而克鲁斯卡尔算法侧重于选择边。这两种算法分别适用于稠密和稀疏图,各有优劣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

6.6.1 生成树及其构造

生成树:所有顶点均有边连接再一起,但不存在回路。

一个图可以有许多棵不同的生成树;所有生成树具有以下共同特点:

  • 生成树的顶点个数与图的顶点个数相同;
  • 生成树是图的极小连通子图,去掉一条边图是非连通的;
  • 一个有n个顶点的连通图的生成树有n-1条边;
  • 在生成树中再加一条边必然形成回路;
  • 生成树中任意两个顶点间的路径是唯一的;
  • 含有n个顶点n-1条边的图不一定是生成树。

 无向图的生成树:

        设图G = (V, E)是连通图,当从图任意顶点出发遍历图G时,将边集E(G)分成两个集合T(G)和B(G),其中T(G)时遍历图时所经过的边的集合,B(G)时遍历时未经过的边的集合。因此,图G1(V, T)是图G的极小连通子图,即子图G1是连通图G的生成树。

6.6.2 最小生成树的定义

最小生成树:给定一个无向网络,在该网络的所有生成树中,使得各边权值之和最小的那棵生成树称为该网的最小生成树,也叫最小代价生成树。

6.6.3 构造最小生成树(Minimum Spanning Tree)

        构造最小生成树的算法有很多,其中大多数算法都利用了MST的性质。MST性质:设N=(V,E)是一个连通图,V是顶点集V的一个非空子集,若边(u,v)是一条具有最小权值的边,其中v∈E,u ∈ V - U,则必存在一棵包含边(u, v)的最小生成树。

MST性质解析:

在生成树的构造过程中,图中n个顶点分属两个集合:

  • 已落在生成树上的顶点集;
  • 尚未落在生成树上的顶点集。

接下来则应在所有连通U中顶点和V - U中顶点的边中选取权值最小的边。

6.6.4 普里姆(Prim)算法 

算法思路:

  1. 设N = (V, E)是连通网,TE是N上最小生成树中边的集合;
  2. 初始令U =  {u0},(u0 ∈ V),TE = {};
  3. 在所有u属于U,v = V-U的边(u,v)∈ E中,找一条代价最小的边(u0, v0);
  4. 将(u0,v0)并入集合TE,同时u0并入U;
  5. 重复上述操作,直至U = V为止,则T=(U, TE)为N的最小生成树。

6.6.5 克鲁斯卡尔(Kruskal)算法 

算法思路:

  1. 设连通图N=(V,E),令最小生成树初始状态为只有n个顶点而无边的非连通图T = {V, {}},每个顶点自成一个连通分量;
  2. 在E中选取代价最小的边,若该边依附的顶点落在T中不同的连通分量上(即不能形成环),则将该边加入到T中;否则舍去此边,选取下一条代价最小的边;
  3. 依次类推,直至T中所有顶点都在同一连通分量为止。

 6.6.6 两种算法的比较

算法名称普里姆(Prim)算法克鲁斯卡尔(Kruskal)算法
算法思路选择点选择边
时间复杂度O(n^{2}) (n为顶点数)O(eloge) (e为边数)
使用范围稠密图稀疏图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值