本文主要是介绍kruskal求得的生成树是最小生成树的证明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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求得的生成树是最小生成树的证明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!