最小生成树图之-Prim算法和Kruskal算法
最小生成树算法:
结合上一章学习了解了图的基本概念,接下来了解一下最小生成树的两种算法。
Prim算法(普里姆算法):
思想:找到所有最短的权值连接的顶点集合,所组成的树是最小生成树。
从某一顶点为起点,逐步找各个顶点上的最小权值的边来构建最小生成树。
首先,从根节点A开始,我们发现A到对所有顶点的权值信息如下:
找到最小权值,权值必须有意义,我们这里的有意义暂定为:权值要大于0,且不能为无穷大。
找到第一个最近的顶点B后,同时更新A点到各个顶点的距离,此时B点已经访问过了,我们需要标识它防止下一次它再被访问,所以我们将其到A的权值更新为0,接下来继续寻找第二个最近的顶点:
开始寻找第四个顶点:
如此往复,一直寻找,如图:
Prim算法的时间复杂度是O(N^2)。
Kruskal算法(克鲁斯卡尔算法)
Prim算法是以顶点为起点开始寻找更新最短权值,但是竟然是为了找到所有的最短权值相连接的顶点集合,那么为何不从最短权值入手?
于是克鲁斯卡尔算法,就将所有的权值放在一个数组中进行排序,然后从最短的权值开始连接所有的顶点,具体思路如下:
获取第一个最短权值,连接两个顶点,
获取第二个最短权值:
如此继续循环,连接下一个最短权值顶点:
以上就是我们克鲁斯卡尔的思想,克鲁斯卡尔的时间复杂度是针对边来讲的,如果边很少,它的效率会非常高,时间复杂度是O(N*logN),这里的N是指边。
总结分析:Prim算法是针对顶点来算的,克鲁斯卡尔是针对边来算的,适用于稀疏图,如果对于边很少的图可以使用克鲁斯卡尔算法,如果针对边数很多的情况下,使用Prim算法会好一点,Prim算法针对稠密图。
最小生成树图之-Prim算法和Kruskal算法相关推荐
- 作业1-采用Prim算法和Kruskal算法构造最小生成树
采用Prim算法和Kruskal算法构造最小生成树 实验报告 1.问题 2.解析 (1)Prim算法 (2)Kruskal算法 3.设计 (1)Prim算法 (2)Kruskal算法 4.分析 (1) ...
- 求的带权图最小生成树的Prim算法和Kruskal算法
求的带权图最小生成树的Prim算法和Kruskal算法 最小生成树的概念 最小生成树其实是最小权重生成树的简称. 一个连通图可能有多个生成树.当图中的边具有权值时,总会有一个生成树的边的权值之和小于或 ...
- 加权无向图与最小生成树(Prim算法和Kruskal算法)
目录 0 引入 1 图的最小生成树定义及相关约定 2 最小生成树原理 2.1 性质 2.2 切分定理 3 贪心思想 4 Prim算法 4.1 算法步骤 4.2 API设计 4.3 Java代码演示 5 ...
- 最小生成树之Prim算法和Kruskal算法
一个连通图可能有多棵生成树,而最小生成树是一副连通加权无向图中一颗权值最小的生成树,它可以根据Prim算法和Kruskal算法得出,这两个算法分别从点和边的角度来解决. Prim算法 输入:一个加权连 ...
- 【最小生成树】Prim算法和Kruskal算法的区别对比
Prim算法和Kruskal算法都是从连通图中找出最小生成树的经典算法- 从策略上来说,Prim算法是直接查找,多次寻找邻边的权重最小值,而Kruskal是需要先对权重排序后查找的- 所以说,Krus ...
- 【Java数据结构与算法】第十九章 贪心算法、Prim算法和Kruskal算法
第十九章 贪心算法.Prim算法和Kruskal算法 文章目录 第十九章 贪心算法.Prim算法和Kruskal算法 一.贪心算法 1.介绍 2.支付问题 二.Prim算法 1.最小生成树 2.介绍 ...
- matlab实现prim算法,Prim算法和Kruskal算法的Matlab实现
Prim算法和Kruskal算法的Matlab实现 <计算机仿真>期末大作业 Prim算法和Kruskal算法的Matlab实现 05605刘禹050697(30) 连线问题应用举例: 欲 ...
- 【数据结构】最小生成树问题(Prim算法和Kruskal算法)
相关概念 连通图与它的生成树 连通图的生成树是包含图中全部顶点的一个极小连通子图.若图的顶点数为n,则它的生成树含有n-1条边.一个连通图可能拥有多个生成树. 最小生成树(Minimum-Spanni ...
- Prim算法和Kruskal算法
Prim算法和Kruskal算法都能从连通图找出最小生成树.区别在于Prim算法是以某个顶点出发挨个找,而Kruskal是先排序边,每次选出最短距离的边再找. 一.Prim(普里姆算法)算法: ...
最新文章
- Apollo 5.0,GitHub热榜第四
- CTFshow 反序列化 web268
- UA MATH571B 试验设计 QE练习题 不使用代码分析试验结果I
- 在同一个Linux上配置多个git账户
- git 拉取gitlab代码
- 2018.09.15 vijos1053Easy sssp(最短路)
- 零基础学习什么编程语言比较合适?别的不说,听说大佬都学了这个!
- Android,已知应用名称, 通过应用名称来启动应用
- 微软Window硬件大会(WinHEC)
- 2017乌鲁木齐ICPC: K. Sum of the Line(容斥)
- ConcurrentHashMap源码分析
- SMOTE算法原理及Python代码实现
- hspice标识符语法
- pl/sql编程语言
- BZOJ 5477: 星际穿越
- lol排位服务器维护赢了没加分,LOL最新排位制裁,“挂机退游戏会被限制加分,力度将逐次叠加”...
- UCSC下载ENCODE数据
- ​​​​Convolutional Neural Networks on Graphswith Fast Localized Spectral Filtering
- python读取excel汉字转成拼音_python 批量将中文名转换为拼音
- python Pygame库介绍和使用,基本游戏开发