Base
A graph whose edge’s weight is not the same as another, is only one minimum spanning Tree.
Proof:
假设T1,T2是G的两棵最小生成树,其边集为E(T1) = {e1,e2,…,en-1}且按边权值从小到大排序(ei >= ei-1),E(T2) = {f1,f2,…fn-1}且按边权值从小到大排序(fi >= fi-1);设k是第一个使ek != fk的下标,不妨设fk > ek,将ek加入到T2中,则T2必定存在一个含边ek环,且在环中必定存在一条边fj,且fj > ek,否则将导致子集{f1,f2,…,fk-1,ek}已构成环与T1是生成树的矛盾。由此T2+{ek}-{fj}也是一棵生成树,而且这棵最小生成树的权值小于T2,这与T2是图G的最小生成树矛盾。故不存在k使得ek != fk,即图的最小生成树唯一;同时可以得到,一个图的最小生成树的权值边表是唯一的。说明:
为什么一定存在环:生成树另加边,一定形成环(这个定理是:数加边形成环)
为什么环中一定有fj>ek,这是因为k是最小的ek!=fk的边,所以k之前的在两个最小生成树中都是一一对应的,在第一个生成树中加入ek没有形成环,则在第二个生成树中的环也不会仅仅是小于k的边构成的.If a graph has different minimum spanning tree, their edge weight sequence is the same.
Proof Prim Algorithm
- 假定所有边的权值不同.
- 用prim算法得出的边分别为e1,e2,en;
若不存在最小生成树包含e1,那么把e1加入任意一颗最小生成树,必然成环,并且在环上可以找到一条不小于e1的边,删掉此边,得到一颗更优的生成树或者得到了一颗包含e1的最小生成树,矛盾。
若包含e1的最小生成树都不包含e2,那么把e2加入其中一颗包含e1的最小生成树中,也会成环,并且在环中也能找到不小于e2的边,同上也会产生矛盾。
同上可以证明prim算法得到的是最小生成树。
Proof Kruskal Algorithm
- 为了避免最小生成树不唯一的问题,可以不妨假设这个图所有的边长都不相等
(注意最小生成树的总长度是原图边长的连续函数,所以可以这样加强条件)
然后用反证法,假定Kruskal算法中的第k步首次出现错误,算法选了E1,但实际上必须选另一条边E2才能得到最小生成树T0
E1连接了两个连通分支,这两个连通分支在最终的T0里是连通的,所以把T0和E1放在一起之后形成的图有一个环,在这个环里一定有k步或之后新选的边(如果没有的话仅凭前k-1条边和E1不会构成环),依照E1的定义,这个环里存在比E1长的边,用E1换掉这条边之后得到的树T1比T0更短,矛盾