Prime算法的思路:从任何一个顶点开始,将这个顶点作为最小生成树的子树,通过逐步为该子树添加边直到所有的顶点都在树中为止。其中添加边的策略是每次选择外界到该子树的最短的边添加到树中(前提是无回路)。

Prime算法的正确性证明:

引理1:对于连通图中的顶点vi,与它相连的所有边中的最短边一定是属于最小生成树的。

引理2:

证明:

假设最小生成树已经建成;(vi, vj)是连接到顶点vi的最短边,在最小生成树中取出vi,断开连接到vi的边,则生成树被拆分成
1、顶点vi
2、顶点vj所在的连通分量(单独一个顶点也看作一个独立的连通分量)
3、其余若干个连通分量(个数大于等于0)
三个部分
现在要重建生成树,就要重新连接之前被断开的各边
虽然不知道之前被断开的都是哪几条边,但是可以通过这样一个简单的策略来重建连接:将vi分别以最小的成本逐个连接到这若干个互相分离的连通分量;具体来说,就是要分别遍历顶点vi到某个连通分量中的所有顶点的连接,然后选择其中最短的边来连接vi和该连通分量;而要将vi连接到vj所在的连通分量,显然通过边(vi, vj)连接的成本最低,所以边(vi, vj)必然属于最小生成树(如果连接到vi的最短边不止一条,只要任意挑选其中的一条(vi, vj)即可,以上的证明对于这种情况同样适用)。
这样我们就为原来只有一个顶点vi的子树添加了一个新的顶点vj及新边(vi, vj);接下来只要将这棵新子树作为一个连通子图,并且用这个连通子图替换顶点vi重复以上的分析,迭代地为子树逐个地添加新顶点和新边即可。
Kruskal算法:通过从小到大遍历边集,每次尝试为最小生成树加入当前最短的边,加入成功的条件是该边不会在当前已构建的图中造成回路,当加入的边的数目达到n-1,遍历结束。
Kruskal算法的正确性证明:
Kruskal算法每次为当前的图添加一条不会造成回路的新边,其本质是逐步地连接当前彼此分散的各个连通分量(单个顶点也算作一个连通分量),而连接的策略是每次只用最小的成本连接任意两个连通分量。这个策略之所以能够实现,是因为每加入一条边之后只会出现两种结果:
1、在已有的连通分量中形成回路
2、连接两个彼此独立的连通分量
所以,通过从小到大遍历边集,判断是否会造成回路,然后逐条添加新边就可以实现上诉的连接策略
接下来需要证明的是,为什么每次用最小成本连接两个连通分量,最后就可以生成一棵最小生成树(毕竟每一个当前的最优解之和未必是全局的最优解)
借用在Prim算法中提到的那个判断就可以很方便地证明:“如果某个连通图属于最小生成树,那么所有从外部连接到该连通图的边中的一条最短的边必然属于最小生成树”
通过这个判断,可以很容易地证明:当最小生成树被拆分成彼此独立的若干个连通分量的时候,所有能够连接任意两个连通分量的边中的一条最短边必然属于最小生成树(因为该边必然是这两个连通分量的可以连接到外部的最短边)。
由此也就证明了,Kruskal算法通过每次以最小的成本来连接两个连通分量的策略确实可以正确地生成最小生成树。

最小生成树的Prim算法以及Kruskal算法的证明的更多相关文章

  1. 最小生成树之Prim算法和Kruskal算法

    最小生成树算法 一个连通图可能有多棵生成树,而最小生成树是一副连通加权无向图中一颗权值最小的生成树,它可以根据Prim算法和Kruskal算法得出,这两个算法分别从点和边的角度来解决. Prim算法 ...

  2. java实现最小生成树的prim算法和kruskal算法

    在边赋权图中,权值总和最小的生成树称为最小生成树.构造最小生成树有两种算法,分别是prim算法和kruskal算法.在边赋权图中,如下图所示: 在上述赋权图中,可以看到图的顶点编号和顶点之间邻接边的权 ...

  3. 【数据结构】最小生成树之prim算法和kruskal算法

    在日常生活中解决问题经常需要考虑最优的问题,而最小生成树就是其中的一种.看了很多博客,先总结如下,只需要您20分钟的时间,就能完全理解. 比如:有四个村庄要修四条路,让村子能两两联系起来,这时就有最优 ...

  4. 最小生成树之 prim算法和kruskal算法(以 hdu 1863为例)

    最小生成树的性质 MST性质:设G = (V,E)是连通带权图,U是V的真子集.如果(u,v)∈E,且u∈U,v∈V-U,且在所有这样的边中, (u,v)的权c[u][v]最小,那么一定存在G的一棵最 ...

  5. 最小生成树(prim算法和kruskal算法)

    学习博客:https://www.cnblogs.com/zhangming-blog/p/5414514.html 其实就是加点法:从不属于这个集合的点中找从本集合可以找到的最小边,加入本集合 看代 ...

  6. Prim算法、Kruskal算法和最小生成树 | Minimum Spanning Tree

    graph to tree非常有趣! 距离的度量会极大地影响后续的分析,欧式距离会放大差异,相关性会缩小差异,导致某些细胞群分不开. 先直观看一下,第一个是Prim,第二个是Kruskal.但是肯定都 ...

  7. 最小生成树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind

    最小支撑树树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind 最小支撑树树 前几节中介绍的算法都是针对无权图的,本节将介绍带权图的最小 ...

  8. 转载:最小生成树-Prim算法和Kruskal算法

    本文摘自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html 最小生成树-Prim算法和Kruskal算法 Prim算 ...

  9. C++编程练习(10)----“图的最小生成树“(Prim算法、Kruskal算法)

    1.Prim 算法 以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树. 2.Kruskal 算法 直接寻找最小权值的边来构建最小生成树. 比较: Kruskal 算法主要是针对边来展开,边数 ...

  10. 最小生成树——Prim算法和Kruskal算法

    洛谷P3366 最小生成树板子题 这篇博客介绍两个算法:Prim算法和Kruskal算法,两个算法各有优劣 一般来说当图比较稀疏的时候,Kruskal算法比较快 而当图很密集,Prim算法就大显身手了 ...

随机推荐

  1. 查漏补缺:进程间通信(IPC):管道

    管道是UNIX系统IPC的最古老形式,所有UNIX系统都提供此种通信机制.管道有以下两种局限性: (1)历史上,管道是半双工的(即数据只能在一个方向上流动). (2)管道只能在具有公共先祖的两个进程之 ...

  2. 【TensorFlow】自主实现包含全节点Cell的LSTM层 Cell

    0x00 前言 常用的LSTM,或是双向LSTM,输出的结果通常是以下两个:1) outputs,包括所有节点的hidden2) 末节点的state,包括末节点的hidden和cell大部分任务有这些 ...

  3. -scp Linux之间复制文件和目录

    scp 简介 scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速 ...

  4. SYC极客大挑战部分题目writeup

    Welcome 复制黏贴flag即可 我相信你正在与我相遇的路上马不停蹄 关注微信工作号回复"我要flag"即可获得flag 代号为geek的行动第一幕:毒雾初现 发现flag为摩 ...

  5. 7-46 jmu-python-求单词长度 (10 分)

    输入n个单词,计算每个单词长度.对单词长度排序,分行输出单词长度及其单词. 输入格式: 行1:单词个数n 分行输入n个单词 输出格式: 分行输出单词长度及其单词.(单词长度,单词)用元组表示 输入样例 ...

  6. 手写node可读流之流动模式

    node的可读流基于事件 可读流之流动模式,这种流动模式会有一个"开关",每次当"开关"开启的时候,流动模式起作用,如果将这个"开关"设置成 ...

  7. crypto-js aes加密解密

    安装 npm install crypto-js --save unit.js import CryptoJS from "crypto-js"; //秘钥 const CRYPT ...

  8. Python基础--动态传参

    形参的顺序: 位置 *arg     默认值  **args  ps:可以随便搭配,但是*和**以及默认值的位置顺序不能变 *,** 形参:聚合 位置参数* >>元祖 关键字** > ...

  9. ASP.NET Core 中间件自定义全局异常处理

    目录 背景 ASP.NET Core过滤器(Filter) ASP.NET Core 中间件(Middleware) 自定义全局异常处理 .Net Core中使用ExceptionFilter .Ne ...

  10. 微信WXSS样式文件

    目录 WXSS官方文档 1. WXSS 1.1. 尺寸单位 1.2. 样式导入 1.3. 内联样式 1.4. 选择器 1.5. 全局样式与局部样式 WXSS官方文档 https://developer ...