秒懂算法 | Prim算法

简介: 实例演示Prim算法运行过程。

640.jpg

01、实例构造

按Prim算法对如图1所示的无向连通带权图构造一棵最小生成树。

640.png


■ 图1 无向连通带权图

假定初始为顶点1,即设定最小生成树T的顶点集合U={1},V-U={2,3,4,5,6};

(1) 初始化,辅助空间closest和lowcost中的值如表1所示。

表1 集合U、V-U及辅助数组closest、lowcost的初始数据

640.png


(2) 贪心选择连接U和V-U的权最小的边,即V-U中lowcost最小的lowcost[3],把它相连的V-U中的顶点3加入到U集合中,把边(closest[3],3)加入到T中,如图2粗线所示。

640.png


■ 图2 将(1,3)加入到T中示意

检查由于3号点的加入,新添加的连接U和V-U的边:

640.png


修正后的数据如表2所示。

表2第一步贪心选择后集合U、V-U、closest、lowcost数据


640.png


(3) 贪心选择连接U和V-U的权最小的边,即V-U中lowcost最小的lowcost[6],把它相连的V-U中的顶点6加入到U集合中,把边(closest[6],6)加入到T中,如图3所示粗线。

640.png


■ 图3 将(3,6)加入到T中示意

检查由于6号点的加入,新添加的连接U和V-U的边:

640.png


修正后的数据如表3所示。

表3 第二步贪心选择后集合U、V-U、closest、lowcost数据


640.png


(4) 贪心选择连接U和V-U的权最小的边,即V-U中lowcost最小的lowcost[4],把它相连的V-U中的顶点4加入到U集合中,把边(closest[4],4)加入到T中,如图4粗线所示。

640.png


■ 图4 将(6,4)加入到T中示意图

检查由于4号点的加入,新添加的连接U和V-U的边;没有添加连接U和V-U的边。数据如表4所示。

表4 第三步贪心选择后集合U、V-U、closest、lowcost数据


640.png


(5) 贪心选择连接U和V-U的权最小的边,即V-U中lowcost最小的lowcost[2],把它相连的V-U中的顶点2加入到U集合中,把边(closest[2],2)加入到T中,如图5粗线所示。

640.png


■ 图5将(3,2)加入到T中示意

检查由于2号点的加入,新添加的连接U和V-U的边:w(2,5)=3,lowcost[5]=6,w(2,5)<lowcost[5],所以修正lowcost[5]=3,closest[5]=2。

数据如表5所示。

表5第四步贪心选择后集合U、V-U、closest、lowcost数据


640.png


(6) 贪心选择连接U和V-U的权最小的边,即V-U中lowcost最小的lowcost[5],把它相连的V-U中的顶点5加入到U集合中,把边(closest[5],5)加入到T中,如图6粗线所示。

640.png


■ 图6 将(2,5)加入到T中示意

各数据结构中数据如表6所示。

表6第五步贪心选择后集合U、V-U、closest、lowcost数据


640.png


此时,U=V,算法结束。算法得到的最小生成树如图7所示。

640.png


■ 图7 最小生成树T

目录
相关文章
|
算法
最小生成树算法:Prim算法
在图论中,最小生成树(Minimum Spanning Tree,简称MST)是一种常用的算法问题。最小生成树是指在一个加权连通图中选取边的子集,使得所有顶点都被覆盖,并且边的总权值最小。
268 0
|
1月前
|
算法 决策智能
基于prim算法求出网络最小生成树实现网络社团划分和规划
该程序使用MATLAB 2022a版实现路线规划,通过排序节点权值并运用Prim算法生成最小生成树完成网络规划。程序基于TSP问题,采用遗传算法与粒子群优化算法进行路径优化。遗传算法通过编码、选择、交叉及变异操作迭代寻优;粒子群优化算法则通过模拟鸟群觅食行为,更新粒子速度和位置以寻找最优解。
|
3月前
|
机器学习/深度学习 算法 Java
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
这篇文章介绍了基于贪婪技术思想的Prim算法和Dijkstra算法,包括它们的伪代码描述、Java源代码实现、时间效率分析,并展示了算法的测试用例结果,使读者对贪婪技术及其应用有了更深入的理解。
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
|
4月前
|
机器学习/深度学习 人工智能 算法
|
5月前
|
算法 C语言
数据结构与算法——最小生成树问题(什么是最小生成树、Prim算法、Kruskal算法)
数据结构与算法——最小生成树问题(什么是最小生成树、Prim算法、Kruskal算法)
34 0
|
算法 C++
用prim和kruskal算法求最小生成树问题
用prim和kruskal算法求最小生成树问题
85 0
|
供应链 算法 Java
java数据结构最经济的地下通道建设方案prim算法
MX是世界上第一大传媒娱乐企业,该公司数十年的经营历史中创作了很多经典影片,此外还经营着很多的规模十分宏大世界级的主题娱乐公园。最近MX公司刚和C国X城市达成协定,共同投资建设C国国内唯一一家主题娱乐公园。
60 0
|
算法 Java
数据结构(13)最小生成树JAVA版:prim算法、kruskal算法
13.1.概述 最小生成树,包含图的所有顶点的一棵树,树的边采用包含在图中的原有边中权重和最小的边。翻译成人话就是遍历一遍全图所有顶点的最短路径,这条路径就叫最小生成树。 最小生成树存在和图是连通图互为充要条件,顶点都不连通,肯定不可能有路能遍历一遍全图。 求解最小生成树有两种常用算法:
172 0
|
算法
Prim算法和Kruskal算法到底哪个好?
Prim算法和Kruskal算法到底哪个好?
204 0
|
算法
大话数据结构--Prim算法
大话数据结构--Prim算法
110 0
下一篇
无影云桌面