1. 生成树
在一个任意连通图G中,如果取它的全部顶点和一部分边构成一个子图G',即:V(G')=V(G)和E(G')⊆E(G)
若同时满足边集E(G')中的所有边既能够使全部顶点连通而又不形成任何回路,则称子图G'是原图G的一棵生成树。
连通图是n个点n-1条边。 在图G的一棵生成树G'中,若再增加一条边,就会出现一条回路。这是因为此边的两个端点已连通,再加入此边后,这两个端点间有两条路径,因此就形成了一条回路,子图G'也就不再是生成树了。同样,若从生成树G'中删去一条边,就使得G'变为非连通图。这是因为此边的两个端点是靠此边唯一连通的,删除此边后,必定使这两个端点分属于两个连通分量中,使G'变成了具有两个两通分量的非连通图。
所以生成树满足以下条件:
(1)V(G')=V(G)和E(G')⊆E(G)
(2)G'联通的
(3)G'没有回路
生成树的性质:
(1)G'中有n-1条边
(2)生成树不唯一
2. 最小生成树Minimum Spanning Tree(MST)
最小生成树是一副连通加权无向图中一棵权值最小的生成树
3 实现方法
求图的最小生成树的方法(算法)主要有两个:
(1)普里姆算法:断集法,子树生长法
(2)克鲁斯卡尔算法:避圈法,短边优先法
主要可以使用Prim和Kruskal算法实现,对于稀疏图来说,用Kruskal效率更高加上并查集可对其进行优化。
4 Kruskal
基本思路是:
先构造一个只有n个节点的子图T。
然后从权值最小的边Ei依次选取,如果添加Ei到T中不产生回路则在T中添加这条边。
如此重复直到添加到n-1条边为止。
5 Prim算法