1. 核心定义
生成树 是一个连通无向图的子图,它必须同时满足以下三个条件:
- 包含原图的所有顶点。
- 是连通的(即从任意顶点到其他任意顶点都有路径可达)。
- 是一个树形结构,即 没有环路 并且有
V - 1条边(V是顶点数)。
简单来说,生成树就是用最少的边(V-1条)将图中所有顶点连接起来,且不形成环路的“骨架”或“脉络”。
2. 为什么重要?(性质)
- 最小连通集:它是保持图连通所需的最少边的集合。去掉任何一条边都会使图不再连通。
- 无环:添加任何一条额外的边(来自原图但不在生成树中)都会立即创建一个环路。
- 不唯一:一个图通常有很多棵不同的生成树(除非它本身就是一个树)。
3. 经典算法:寻找最小生成树
当图的每条边都有权重(成本、长度等)时,最小生成树 就是所有生成树中边权重总和最小的那一棵。MST是网络设计、布线、聚类等领域的关键问题。
有两个非常著名和高效的贪心算法:
a) 普里姆算法
- 思路:“从点出发,逐步生长”。从一个顶点开始,每次选择一条连接 已访问顶点集 和 未访问顶点集 的权重最小的边,并将该边连接的顶点加入已访问集。
- 操作对象:顶点。
- 适合:稠密图(边很多)。
b) 克鲁斯卡尔算法
- 思路:“按边排序,逐个合并”。将边按权重从小到大排序,依次选择边。如果加入这条边不会与已选的边构成环路,就加入它,否则丢弃。
- 判断环路:通常使用并查集 数据结构来高效判断。
- 操作对象:边。
- 适合:稀疏图(边较少)。
4. 实例说明
考虑一个带权重的无向连通图:
(B)
2/ \3
/ \
(A)---3--(C)
\ /
4\ /1
(D)
它的其中一棵生成树(权重和为 2+3+1=6):
(B)
2/ \3
/ \
(A) (C)
\
1\
(D)
它的最小生成树(权重和为 2+3+1=6,注意这个例子中MST不唯一,另一种A-D-C-B也是6):
(B)
2/
/
(A) (C)
\
1\
(D)
(这里省略了B-C的边,总权重为2+4+1=7的树就不是最小的)
5. 关键区别与总结
| 特性 | 生成树 | 最小生成树 |
|---|---|---|
| 目标 | 找到任何一棵连通无环的包含所有顶点的子图 | 找到权重和最小的生成树 |
| 边权重 | 可以没有权重概念 | 必须有权重,并基于权重进行优化 |
| 唯一性 | 通常不唯一 | 可能唯一,也可能不唯一(当有权重相等的边时) |
| 算法 | DFS/BFS遍历即可得到一棵生成树 | Prim算法、Kruskal算法 |
6. 应用场景
- 通信网络设计:用最少的电缆长度连接所有城市(路由器、基站)。
- 交通路网规划:用最低成本的道路连接所有城镇。
- 电路设计:用最短的线路连接所有元件。
- 聚类分析:在机器学习中,MST可用于层次聚类。
- 网络广播协议:确保数据包能到达所有节点且无环路(如生成树协议STP)。
总结:生成树是图论中的一个基本且强大的概念,它抓住了连通性的本质。而最小生成树则是其在优化问题中的经典应用,通过Prim或Kruskal算法可以高效求解。

Comments NOTHING