原文地址:http://blog.csdn.net/yelbosh/article/details/7647860
什么是MST?MST就是Most Small Tree,应该就是最小生成树的意思吧,具体不是很清楚,MST性质就是最小生成树性质(以下简称MST性质),我们在看最小生成树的算法的时候,很多情况下都有关于这条性质的说明,比如,历史上最经典的Prim算法和Kruskal算法就是根据这个性质演算出来的Algorithm,MST性质的声明如下:
最小生成树性质:设G=(V,E)是一个连通网络,U是顶点集V的一个真子集。若(u,v)是G中一条“一个端点在U中(例如:u∈U),另一个端点不在U中的边(例如:v∈V-U),且(u,v)具有最小权值,则一定存在G的一棵最小生成树包括此边(u,v)。
关于这个性质的证明过程,网上的资料不多,即使有,也不是很全面或者证明过程不够细节,我也是花了很长时间才弄清楚的,其实很简单,下面大家看看我是怎么证明的:
为了方便下面的证明过程,预先做一些约定:
①将集合U中的顶点看作是红色顶点
②而V-U中的顶点看作是蓝色顶点
③连接红点和蓝点的边看作是橙色边
④权最小的橙色边称为轻边(即权重最"轻"的边)
因此,MST性质中所述的边(u,v)就可简称为轻边。如下图:
用反证法来证明MST性质的正确性,假设G中任何一棵最小生成树都不含轻边(u,v)。则若T是G的一棵最小生成树,则它不含此轻边。
由于T是包含了G中所有顶点的连通图,所以T中必有一条从红点u到蓝点v的路径P,而且路径P中必定包含一条橙色边(u',v')连接红点集和蓝点集,否则u和v不可能连通。我们假设 u-a-u'-v'-v 就是这样的一条路径,看下面的图:
当把轻边(u,v)加入树T时,该轻边和P明显构成了一个回路。删去紫边(u',v')后回路亦消除,由此可得另一生成树T'。 如下:
很显然,T'和T的差别仅仅在于T'用轻边(u,v)取代了T中权重可能更大的橙色边(u',v')。因为(u',v')的权重不可能比(u,v)小,由反证法的原理可知我们的前提条件里已经说明,所有橙色边里最小的一条边称为轻边,因为(u,v)是已经假定了的轻边,因此,必定有如下关系式:
②而V-U中的顶点看作是蓝色顶点
③连接红点和蓝点的边看作是橙色边
④权最小的橙色边称为轻边(即权重最"轻"的边)
因此,MST性质中所述的边(u,v)就可简称为轻边。如下图:
![MST性质的证明 - 流浪者 -](http://img20.ph.126.net/jf5EhWzNY6pFr4sUFHxEHg==/3174756262321549001.png)
由于T是包含了G中所有顶点的连通图,所以T中必有一条从红点u到蓝点v的路径P,而且路径P中必定包含一条橙色边(u',v')连接红点集和蓝点集,否则u和v不可能连通。我们假设 u-a-u'-v'-v 就是这样的一条路径,看下面的图:
![MST性质的证明 - 流浪者 -](http://img.ph.126.net/Be80NJN-UV7qzW1WIQuPWA==/2345249505953693135.png)
当把轻边(u,v)加入树T时,该轻边和P明显构成了一个回路。删去紫边(u',v')后回路亦消除,由此可得另一生成树T'。 如下:
![MST性质的证明 - 流浪者 -](http://img846.ph.126.net/WFrE8Vgbw8smcDEwYZ8eOw==/2060678304500198698.png)
很显然,T'和T的差别仅仅在于T'用轻边(u,v)取代了T中权重可能更大的橙色边(u',v')。因为(u',v')的权重不可能比(u,v)小,由反证法的原理可知我们的前提条件里已经说明,所有橙色边里最小的一条边称为轻边,因为(u,v)是已经假定了的轻边,因此,必定有如下关系式:
w(u,v)≤w(u',v')
所以,
w(T')=w(T)+w(u,v)-w(u',v') ≤ w(T)
故此T'也是G的一颗最小生成树,但是它包含(u,v),这与假设是矛盾的,所以,MST性质成立!
故此T'也是G的一颗最小生成树,但是它包含(u,v),这与假设是矛盾的,所以,MST性质成立!
转自http://fdcwqmst.blog.163.com/blog/static/164061455201010392833100/
其实个人觉得没必要这么麻烦,道理很简单,我们假设任何一棵最小代价生成树都不包含(u,v),由于树都是连通图,因而必定存在其他的边联通了顶点集U和V-U,并且这样的边必须只有一条,否则便会形成回路,因为顶点集U和V-U里面各个顶点也都是连通的,你画画看看便知道了。那么如果我们现在把轻边(u,v)加入这个树中,那么便形成回路了,那这个时候我们把原来的联通U和V-U的边去掉,这样形成的树是比原来的那棵最小生成树的代价还要小的,因为边(u,v)是连接两个点集之间的权值最小的边。所以这棵新的树才是最小生成树,但是它包含了边(u,v),所以与假设矛盾,结论成立。其实我们要证明的就是,对于两个点集,有最小的权值的边(u,v),如果该图的最小生成树不包括这条边的话,那么这棵树就 不是最小生成树。