码迷,mamicode.com
首页 > 其他好文 > 详细

最小生成树

时间:2018-04-29 23:55:36      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:row   class   迭代   合并   http   分享   独立   mat   包含   

一、定义

  • 连通图:在无向图中,若任意两个顶点vi与vj都有路径相通,则称该无向图为连通图。
  • 强连通图:在有向图中,若任意两个顶点vi与vj都有路径相通,则称该有向图为强连通图。
  • 连通图:在连通图中,若图的边具有一定的意义,每一条变都有对应着一个数,称为权,权代表着连接两个顶点的代价,称这种连通图叫做连通网。
  • 生成树:一个连通图的生成树是指一个连通子图,它含有图中全部n个顶点,但只有足以构成一颗树的n-1条边。一颗有n个顶点的生成树有且仅有n-1条边,如果生成树中再添加一条边,则必定成环。
  • 最小生成树:(代价最小)一个有n个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有n个结点,并且有保持图连通的最少的边。

最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。

 

二、Kruskal算法

此算法可以称为“加边法”,初始最小生成树边数为0,每迭代一次就选择一条满足条件的最小代价边,加入到最小生成树的边集合里。

1.把图中的所有边按代价从小到打排序;

2.把图中的n个顶点看成独立的n棵树组成的森林;

3.按权值从小到大选择边,所选的边连接的两个顶点ui,vi,应属于两颗不同的树,则成为最小生成树的一条边,并将这两颗树合并作为一棵树。

4.重复(3),直到所有顶点都在一棵树内或者有n-1条边为止。

技术分享图片

 

三、Prim算法

此算法可以称为”加点法“,每次迭代选择代价最小的边对应的点,加入到最小生成树中。

算法从某一顶点s开始,逐渐长达覆盖整个连通网的所有顶点。

1.图的所有顶点集合为V;初始令集合u={s},v=V?u;

2.在两个集合u,v能过够组成的边中,选择一条代价最小的边(u0,v0),加入到最小生成树中,并把v0并入到集合u中。

3.重复上述步骤,直到最小生成树有n-1条边或者n个顶点为止。

 技术分享图片

最小生成树

标签:row   class   迭代   合并   http   分享   独立   mat   包含   

原文地址:https://www.cnblogs.com/ch122633/p/8972319.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!