关闭

Minimum Spanning Tree

1378人阅读 评论(0) 收藏 举报
分类:

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更短,矛盾
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:382616次
    • 积分:6428
    • 等级:
    • 排名:第3779名
    • 原创:345篇
    • 转载:8篇
    • 译文:1篇
    • 评论:79条
    博客专栏
    最新评论