一、最小生成树简介
一个有 n n n个顶点的连通图 G = ( V , E ) G=(V,E) G=(V,E)的生成树是包含 G G G中全部顶点的一个极小连通子图,它有且仅有 n − 1 n-1 n−1条边。也就是说,如果添加一条边,则构成回路;如果删去任何一条边,则生成树不再连通。一个生成树的代价为该生成树中所有边权的总和。称代价最小的生成树为最小生成树(Minimum Spanning Tree, MST)。
最小生成树是图的一种重要应用,在城市道路交通规划、网络路由选择、城市通信网架设等实际问题中应用广泛。例如,在 n n n个城市之间架设通信网路,最多可设置 n ( n − 1 ) 2 n(n-1)\over2 2n(n−1)条线路,每条线路都有一定的成本,如何从这 n ( n − 1 ) 2 n(n-1)\over2 2n(n−1)条线路中选择 n − 1 n-1 n−1条线路,使得总成本最小?将这一问题表示为带权连通图,用图中的顶点表示城市,边表示城市之间的通信线路,边的权值为设置该线路所需的成本,则问题就可以转化为求这个图的最小生成树。
二、最小生成树的性质
定理1 最小生成树的子树也是最小生成树。
证明:设 T = ( V , E T ) T=(V,E_T) T=(V,ET)是图 G G G的一棵最小生成树, T ′ = ( U , E U ) ⊆ T T'=(U,E_U)\subseteq T T′=(U,EU)⊆T,下面证明 T ′ T' T′是 U U U的导出子图 G ′ G' G′的最小生成树。若 T ′ T' T′不是 G ′ G' G′的最小生成树,则取 G ′ G' G′的最小生成树 T ∗ T^* T∗,用 T ∗ T^* T∗中的边替换 T T T在 U U U中的边 E U E_U EU可以得到代价更小的生成树,这与 T T T是最小生成树矛盾。因此 T ′ T' T′一定是 G ′ G' G′的最小生成树。∎
定理2(Key Property) 设 T = ( V , E T ) T=(V,E_T) T=(V,ET)是图 G = ( V , E ) G=(V,E) G=(V,E)的一棵最小生成树, w ( e ) w(e) w(e)表示边 e e e的权值。假设 F ⊆ E T F\subseteq E_T F⊆ET(即 F F F是 T T T的边集的子集), U ⊂ V U\subset V U⊂V是 G G G的一个点集,边集 M = { ( u , v ) ∈ E ∣ u ∈ U , v ∈ V − U } M=\{(u,v)\in E|u\in U,v\in V-U\} M={(u,v)∈<

本文介绍了最小生成树的概念及其重要性,详细阐述了Prim算法和Kruskal算法的原理、性质及证明,并提供了两种算法的代码实现。Prim算法采用逐步扩展顶点的方式构造最小生成树,Kruskal算法则是按边权值从小到大依次选择,避免形成环。这两个算法在图论和网络优化问题中有着广泛应用。
最低0.47元/天 解锁文章
2332

被折叠的 条评论
为什么被折叠?



