生成树

xiaomage 发布于 2026-02-25 20 次阅读


1. 核心定义

生成树 是一个连通无向图子图,它必须同时满足以下三个条件:

  1. 包含原图的所有顶点
  2. 是连通的(即从任意顶点到其他任意顶点都有路径可达)。
  3. 是一个树形结构,即 没有环路 并且有 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算法可以高效求解。

此作者没有提供个人介绍。
最后更新于 2026-02-25