【数据结构】最小生成树之prim算法和kruskal算法
在日常生活中解决问题经常需要考虑最优的问题,而最小生成树就是其中的一种。看了很多博客,先总结如下,只需要您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算法得出,这两个算法分别从点和边的角度来解决. Prim算法 ...
- java实现最小生成树的prim算法和kruskal算法
在边赋权图中,权值总和最小的生成树称为最小生成树.构造最小生成树有两种算法,分别是prim算法和kruskal算法.在边赋权图中,如下图所示: 在上述赋权图中,可以看到图的顶点编号和顶点之间邻接边的权 ...
- 最小生成树之 prim算法和kruskal算法(以 hdu 1863为例)
最小生成树的性质 MST性质:设G = (V,E)是连通带权图,U是V的真子集.如果(u,v)∈E,且u∈U,v∈V-U,且在所有这样的边中, (u,v)的权c[u][v]最小,那么一定存在G的一棵最 ...
- 最小生成树(prim算法和kruskal算法)
学习博客:https://www.cnblogs.com/zhangming-blog/p/5414514.html 其实就是加点法:从不属于这个集合的点中找从本集合可以找到的最小边,加入本集合 看代 ...
- 转载:最小生成树-Prim算法和Kruskal算法
本文摘自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html 最小生成树-Prim算法和Kruskal算法 Prim算 ...
- 最小生成树——Prim算法和Kruskal算法
洛谷P3366 最小生成树板子题 这篇博客介绍两个算法:Prim算法和Kruskal算法,两个算法各有优劣 一般来说当图比较稀疏的时候,Kruskal算法比较快 而当图很密集,Prim算法就大显身手了 ...
- 最小生成树Prim算法和Kruskal算法
Prim算法(使用visited数组实现) Prim算法求最小生成树的时候和边数无关,和顶点树有关,所以适合求解稠密网的最小生成树. Prim算法的步骤包括: 1. 将一个图分为两部分,一部分归为点集 ...
- Prim算法和Kruskal算法
Prim算法和Kruskal算法都能从连通图找出最小生成树.区别在于Prim算法是以某个顶点出发挨个找,而Kruskal是先排序边,每次选出最短距离的边再找. 一.Prim(普里姆算法)算法: ...
- Prim算法和Kruskal算法的正确性证明
今天学习了Prim算法和Kruskal算法,因为书中只给出了算法的实现,而没有给出关于算法正确性的证明,所以尝试着给出了自己的证明.刚才看了一下<算法>一书中的相关章节,使用了切分定理来证 ...
随机推荐
- webapi put 请求405问题
put 请求的时候 浏览器会像服务器发送两个请求 如何没做任何配置第一个options请求是会报错的 这是需要配置路由给options作响应 这时options请求就通过了,然后你们会看到你的put ...
- Highsoft.Highcharts 5.0.6439.38401 key
Highcharts .NET allows developers to make charts using Highcharts API with the Microsoft .NET Framew ...
- Linux安装Oracle调整tmpfs以突破1.7G的限制
调整/dev/shm的大小 ---------------------------------------------------------1.查看大小 df -h /dev/shm [@more@ ...
- mysql 行转列,对列的分组求和,对行求和
CREATE TABLE students( id INT PRIMARY KEY, NAME VARCHAR(11)); CREATE TABLE courses( id INT PRIMARY K ...
- 「BZOJ 2434」「NOI 2011」阿狸的打字机「AC自动机」
题意 有一个打字机,支持三种操作: 字符串末尾加一个小写字母 字符串末尾减一个字符 输出这个字符串 经过不超过\(n\)次操作后有\(m\)组询问:\((x,y)\),表示第\(x\)次输出第字符串在 ...
- 5w5:第五周程序填空题1
描述 写一个MyString 类,使得下面程序的输出结果是: 1. abcd-efgh-abcd- 2. abcd- 3. 4. abcd-efgh- 5. efgh- 6. c 7. abcd- 8 ...
- 简单概括下浏览器事件模型,如何获得资源dom节点
在各种浏览器中存在三种事件模型:原始事件模型,DOM2事件模型,IE事件模型.其中原始的事件模型被所有浏览器所支持,而DOM2中所定义的事件模型目前被除了IE以外的所有主流浏览器支持. 浏览器事件模型 ...
- 【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 文章声明 此文章部分资料和代码整合自网上,来源太多已经无法查明出处,如侵犯您的权利,请联系我删除. 01 什么是旅行商问题(TS ...
- selenium滑动验证码操作
1.首先要找到你要滑动的地方 2.调动鼠标事件按住不动 3.调整坐标即可 我这里是为了调试加了很多的sleep,print(hander)是为了看是否定位到了元素 4.效果如下图,但是我这里的验证文字 ...
- docker构建mysql容器及Navicat 远程连接
1. MySQL部署 1.1拉取MySQL镜像 docker pull mysql 查看镜像 docker images 1.2创建MySQL容器 首先建立所需要的 文件夹: docker run - ...