一、最小生成树

  在无向图中,连通且不含圈的图称为树(Tree)。给定无向图G=(V,E),连接G中所有点,且边集是E的子集的树称为G的生成树(Spanning Tree),而权值最小的生成树称为最小生成树(Minning Spanning Tree,MST)。

二、Kruskal

步骤:

  1、将所有的边按照从小到大的顺序排列

  2、从小到大一次考量每条边(u,v),如果u和v不在同一连通分量,那么把(u,v)加入连通分量

  3、重复步骤2,直到图中所有节点都在同一连通分量中

图解:

  

原理:

  如果u和v在不同的连通分量中,那么加入(u,v)一定是最优的。为什么呢?

 下面用反证法:如果这条边不在最小生成树中,它连接的两个连通分量最终还是要连起来的,通过其他的连法,那么另一种连法与这条边一定构成了环,而环中一定有一条权值大于这条边的边,用这条边将其替换掉,图仍旧保持连通,但总权值减小了。也就是说,如果不选取这条边,最后构成的生成树的总权值一定不会是最小的。

三、Prim

步骤:

  1、初始化,Vnew = {x},其中x为集合V中的任意节点(起始点),Enew = {}

  2、在集合E中选取权值最小的边(u, v),其中u为集合Vnew中的元素,而v则是V中没有加入Vnew的顶点(如果存在有多条满足                前述条件即具有相同权值的边,则可任意选取其中之一)。将v加入集合Vnew中,将(u, v)加入集合Enew中;

  3、重复操作2,直到Vnew = V

图解:

  

 证明:

   prim生成的树为T0, 最小生成树(MST)为Tmin

  两棵树的边从小到大权重比较,设第一个属于 T0 但不属于 Tmin 的边为 ed1, 连接该边的两个顶点为 (vs, ve1)。同时存在第一个属          于 Tmin 但不属于 T0 的边为 ed2, 连接该边的两个顶点为 (vs, ve2)。

  两个边的起点相同。由Prim算法性质可知,w(ed2) >= w(ed1)。

  此时,在 Tmin 中删除 ed2 ,添加 ed1,边的数量和顶点数量均不变,且不存在环,因此得到新的生成树Tnew,且cost(Tmin)>=cost              (Tnew)。又因为 Tmin 是MST 所以 cost(Tmin)=cost(Tnew)。

最新文章

  1. 总结:Mac前端开发环境的搭建(配置)
  2. HDU 4832 Chess (DP)
  3. vs xamarin android SharedPreferences
  4. css3 transition effect(其它效果)
  5. hdu Dragon Balls
  6. Sublime Text 2 中文 GBK 规范的配置 暨 解决中文乱码问题 简述
  7. Atitit.java expression fsm 表达式分词fsm引擎
  8. BZOJ4304 : 道路改建
  9. Cocos2d-x移植到WindowsPhone8移植问题-libcurl库移植问题
  10. inline-block和text-indent在IE6,IE7下同时使用的兼容问题解决方法
  11. Android 开源项目源码解析(第二期)
  12. scss 初学笔记 三 继承
  13. Linux下安装使用Redis
  14. Data Source与数据库连接池简介 JDBC简介(八)
  15. Promise 用法
  16. Linux系统编程——Daemon进程
  17. freopen
  18. Confluence 6 配置一个 Confluence 环境
  19. Oracle JDBC驱动安装到Maven本地仓库
  20. 读书笔记 之《Thinking in Java》(对象、集合、异常)

热门文章

  1. Flutter实战视频-移动电商-13.首页_广告Banner组件制作
  2. Spring Boot2中配置HTTPS
  3. HDU - 3345 War Chess 广搜+优先队列
  4. vbs实现zip压缩
  5. PostgreSQL 务实应用(一/5)树形层级
  6. sql查询的时候,等于这两个的值得全部取出来
  7. lightoj 1078【同余定理】
  8. MonogoDb的角色分类
  9. unicode码表和标准下载 unicode官网
  10. servlet小型应用服务器搭建通过tomcat发布web项目