最小生成树之prim算法和kruskal算法

转载 2018年04月17日 15:14:22

在日常生活中解决问题经常需要考虑最优的问题,而最小生成树就是其中的一种。看了很多博客,先总结如下,只需要您20分钟的时间,就能完全理解。

比如:有四个村庄要修四条路,让村子能两两联系起来,这时就有最优的问题,怎样修才是做好的,如下图:第一个是网全图,后三个图的修路方案都可以

1.树的定义:有n个顶点和n-1条边,没有回路的称为树

生成树的定义:生成树就是包含全部顶点,n-1(n为顶点数)条边都在图里就是生成树

最小:指的是这些边加起来的权重之和最小

2.判定条件:向生成树中任加一条边都一定构成回路

充分必要条件:最小生成树存在那么图一定是连通的,反过来,图是连通的则最小生成树一定存在

3.和最小生成树有关的两个算法:prim算法和kruskal算法

a)prim算法——让小树慢慢长大型算法

按照树的定义,一个顶点就是一棵树。

原理:

1)我们选择一个顶点,也就是选择了一个树。

2)向外找权重最小的边,这样这棵树就有了两个顶点

3)再以这两个顶点向外找权重最小的边,依次循环,知道所有顶点收到树里

举例:

第一步:选择V1作为顶点

第二步:对比一下与V1相连的各条边的权重,选择最小的V1-V4这条边

第三步:以V1和V4为树,向外找权重最小的边,这时就有了V1-V2,V4-V3两条边,这样就把顶点V2和V3收进了树里。

接着以V1,V2,V3,V4为顶点的树,向外选权值最小的边,注意不能构成回路。依次循环,这样就选择了V4-V7,V7-V5,V7-V6这三条边

数一下现在已经包含了全部的7的顶点,和6条边了,这样最小生成树就长大了

 

b)kruskal算法——将森林合并为树

原理:

1)和prim算法不一样的是,kruskal算法先选择权重最小的边(因为一个顶点就是一棵树,那么一个边两个顶点就可以看成是一棵树)

2)接着选择剩下的权值比较小的边,注意不能形成回路,只到包含全部顶点

举例:

还是上面那幅图

第一步:先选择V1-V4,V6-V7两条权值为1的边

第二步:选择V4-V3,V1-V2两条权值为2的边。接着不能选择V4-V2权值为3的边,这样就构成了回路,只能选择V4-V7权值为4的边。

同理不能选择V6-V5权值为5的边,因为会构成回路,只能选择V7-V5权值为6的边。

此时就已经包含了全部的7的顶点,和6条边了,这样最小生成树就从森林变成了树

【最小生成树】Prim算法和Kruskal算法的区别对比

Prim算法和Kruskal算法都是从连通图中找出最小生成树的经典算法。从策略上来说,Prim算法是直接查找,多次寻找邻边的权重最小值,而Kruskal是需要先对权重排序后查找的。 所以说,Kr...
  • liuchuo
  • liuchuo
  • 2016-12-21 21:59:32
  • 2044

Prim算法和Kruskal算法构造最小生成树

最小生成树 首先,生成树是建立在无向图中的,对于有向图,则没有生成树的概念,所以接下来讨论的图均默认为无向图。对于一个有n个点的图,最少需要n-1条边使得这n个点联通,由这n-1条边组成的子图则称为...
  • qq_18230813
  • qq_18230813
  • 2015-07-31 23:19:24
  • 1146

最小生成树(Prim算法和Kruskal算法)—理解与论证

向世界分享科学之美,让科学流行起来          对于一个给定的连通无向图G=(V,E),其最小生成树被定义如下:取边集E中的子集E‘构成连通树,同时满足,其中表示边(集...
  • MathThinker
  • MathThinker
  • 2015-08-23 17:16:18
  • 2162

最小生成树:prim算法和kruskal算法

一个连通图的生成树是图的极小连通子图。它包含图中的所有顶点,并且只含尽可能少的边。若砍去它的一条边,就会使生成树变成非连通图;若给它增加一条边,则会形成一条回路。 最小生成树有如下性质: 1.最小...
  • yang1018679
  • yang1018679
  • 2015-05-14 18:57:03
  • 696

最小生成树(prim算法,kruskal算法)

对于边上有权的图来说,边权值和最小的生成树叫做这个图的最小生成树。如果一个图的边权值都不相同那么最小生成树是唯一的。 求无向图的最小生成树主要有prim算法和kruskal算法两个。 prim算法思想...
  • theArcticOcean
  • theArcticOcean
  • 2015-06-27 19:29:30
  • 980

最小生成树Prim与Kruskal算法的比较

最小生成树是图论问题中很基本的一个操作。常用的算法有Prim和Kruskal两种算法。本文对这两种算法稍作区别与讨论。Prim算法是依赖于点的算法。它的基本原理是从当前点寻找一个离自己(集合)最近的点...
  • Mollnn
  • Mollnn
  • 2016-09-19 21:48:50
  • 4562

图论中最小生成树构造算法之Prim算法和Kruskal算法

图是 由顶点的有穷非空集合和点之间边的集合构成: G={V,E},V是顶点集合,E是顶点之间边的集合。根基顶点之间边有无方向性可分为:有向图和无向图: 在图中,当对边赋予有意义数值时候,成为网图。...
  • yanerhao
  • yanerhao
  • 2015-06-25 16:24:42
  • 2776

数据结构 图的最小生成树 C++描述 使用prim算法、kruskal算法

  • 2009年05月18日 19:37
  • 1.66MB
  • 下载

c语言实现最小生成树的prim算法和kruskal算法

  • 2013年12月21日 12:06
  • 62KB
  • 下载

最小生成树的两种算法:Prim和Kruskal算法

越来越明白了一个道理:你写不出代码的原因只有一个,那就是你没有彻底理解这个算法的思想!! 以前写过最小生成树,但是,水了几道题后,过了一段时间,就会忘却,一点也写不出来了。也许原因只有一个,那就是我没...
  • I_am_a_winer
  • I_am_a_winer
  • 2015-04-25 22:42:28
  • 1635
收藏助手
不良信息举报
您举报文章:最小生成树之prim算法和kruskal算法
举报原因:
原因补充:

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