Minimum Spanning Tree

原创 2016年06月01日 16:13:37

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更短,矛盾
版权声明:如果文中有任何问题或者值得讨论的地方,都可以在下方留言或者QQ526664687,欢迎交流!!!

相关文章推荐

MST(Kruskal’s Minimum Spanning Tree Algorithm)

You may refer to the main idea of MST in graph theory. http://en.wikipedia.org/wiki/Minimum_spanning...

hdoj 4408 Minimum Spanning Tree 求最小生成树的数目

最小生成树计数-Kruskal+Matrix_Tree定理 基本介绍 给定一个含有N个结点M条边的无向图,求它最小生成树的个数t(G); 算法思想 抛开“最小”的限制不看,如果只要求求出所有...

Codeforces 609E Minimum spanning tree for each edge 树链剖分+RMQ(st算法)+最小生成树

题意 就是给你一个有权无向图,无子环、无重边,问你,要求对每一个边i,必须在生成树里时的最小生成树的权值。 思路 这题思路不算太难想到,主要是第一次写树链剖分各种卡。。。这叫一个烦。。幸亏CF上可以看...

《Boost》Part1 Minimum Spanning Tree

《Boost》Part1 Minimum Spanning Tree 1、Boost中的最小生成树介绍 MST最小生成树,是图论中的基本算法,还有一种是最大生成树,此处暂不介绍。 最小生成树其实是...

Kruskal’s Minimum Spanning Tree Algorithm

来源:点击查看原文 前几天看Prim 、Dijkstra、Floyd,翻翻书,在百度上找找博客倒也知道算法什么意思,然后自己编码实现倒也简单~~ 但今天看kruskal~ 教材上扯一堆,不知...

[树链剖分+MST] CF609E. Minimum spanning tree for each edge

题目链接:Minimum spanning tree for each edge 题意:给一个无向图,n个点,m条边,对任意边edge[i],求出包含有边edge[i]的最小生成树。 做法:考虑MST...

HDU 4408 Minimum Spanning Tree(最小生成树计数)

题目链接: HDU 4408 Minimum Spanning Tree 题意: 给nn个点和mm条边,求生成最小生成树的方案数?答案模pp. 数据范围:n≤100,m≤1000,p≤1010...

CodeForces 609E Minimum spanning tree for each edge (lca+最小生成树+倍增)

题意:给出一个n个点m条边的无向图,问每条边所在的最小生成树的权值和是多少。 思路:首先求出整个图的最小生成树,然后对于任意一条边替换这条边两点到lca的最大边,这个值就是这条边所在的最小生成树的权值...

HDU 4408 - Minimum Spanning Tree(最小生成树计数)

有边权的最小生成树计数 模板 #pragma comment(linker, "/STACK:1024000000,1024000000") #include #include #include...

最小生成树(Minimum-Spanning-Tree, MST)

目录目录 概述 普里姆Prim算法 克鲁斯卡尔Kruskal算法概述一个连通图的生成树是图的极小联通子图,它包含图中所有顶点,并且只含尽可能少的边。这意味着对于生成树来说,若砍去一条边,就会使生成树变...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)