最小生成树
生成树
所有顶点均连接在一起,但不存在回路的图。一个图可以有多棵不同的生成树。
生成树的特点:
- 生成树的顶点个数和图的顶点个数相同;
- 生成树是图的极小连通子图,去掉一条边则非连通;
- 一个有n个顶点的连通图的生成树有n-1条边;
- 在生成树中再加一条边必然形成回路
- 生成树任意两个顶点间的路径是唯一的
无向图的生成树
最小生成树 MST
给定一个无向网络,在该网的所有生成树中,使得各边权值之和最小的那棵生成树称为该网的最小生成树
性质
在生成树的构造过程中,图中n个顶点分属两个集合:
- 已落在生成树上的顶点集:U
- 尚未落在生成树的顶点集:V - U
接下来则应在所有连通U中顶点和V-U中顶点的边中选取权值最小的边
构造最小生成树
Prim算法
算法思想: 对于包含 N 个顶点的连通网,普里姆算法每次所有连通U中顶点和V-U中顶点的边中选取权值最小的边,这样的操作重复 N-1 次,由 N-1 条权值最小的边组成的生成树就是最小生成树
Kruskal算法
算法思想: 将连通网中所有的边按照权值大小做升序排序,从权值最小的边开始选择,只要此边不和已选择的边一起构成环路,就可以选择它组成最小生成树,直至所有顶点都在同一连通分量中。
不能形成环!
B,D | D,T | A,C | C,D | C,B | B,T | A,B | S,A | S,C |
---|---|---|---|---|---|---|---|---|
2 | 2 | 3 | 3 | 4 | 5 | 6 | 7 | 8 |
最小生成树: