码迷,mamicode.com
首页 > 其他好文 > 详细

kruskal求得的生成树是最小生成树的证明

时间:2015-05-30 22:46:57      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:


kruskal求得的生成树是最小生成树的证明

给一带权连通的树一定会有至少一棵生成树,那么这些生成树中间必然会会存在至少一棵最小生成树。 
假设T是用kruskal求出来的最小生成树,而U是这个图的最小生成树,如果U == T,那么证明结束。 
然而如果T != U,那么至少存在一条边在T中,不在U中。那么我们希望证明T和U中所有边的权值之和是相等的。假设存在k条边存在T中不存在U中。 
接下来进行k次变换: 
每次将在T中不在U中的最小的边f拿出来放到U中,那么U中必然形成一条唯一的环路,我们取出这个环路上最小的且不再T中的边e放回到T中,这样的边e一定是存在的,因为之前的T不存在环路(如果e在T中那么就可能和f形成环路)。 
现在证明f和e的关系,如果f和e相等的,那么k次变换后,T和U的权值之和是相等的,那么证明就成立了。 
假设f < e,那么后来形成的U是权值之和更小了,与U是最小生成树矛盾。 
假设f > e,那么根据kruskal的做法,e是在f之前被取出来的边但是被舍弃了,一定是因为e和比e小的边形成了环路,而比e小的边都是存在U中的,而e和这些边并没有形成环路,于假设矛盾。 
所以f = e。 
参考链接


kruskal求得的生成树是最小生成树的证明

标签:

原文地址:http://blog.csdn.net/u012997373/article/details/46278307

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!