秒懂算法 | 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)是一种常用的算法问题。最小生成树是指在一个加权连通图中选取边的子集,使得所有顶点都被覆盖,并且边的总权值最小。
1570 0
|
机器学习/深度学习 算法 Java
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
这篇文章介绍了基于贪婪技术思想的Prim算法和Dijkstra算法,包括它们的伪代码描述、Java源代码实现、时间效率分析,并展示了算法的测试用例结果,使读者对贪婪技术及其应用有了更深入的理解。
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
|
算法 决策智能
基于prim算法求出网络最小生成树实现网络社团划分和规划
该程序使用MATLAB 2022a版实现路线规划,通过排序节点权值并运用Prim算法生成最小生成树完成网络规划。程序基于TSP问题,采用遗传算法与粒子群优化算法进行路径优化。遗传算法通过编码、选择、交叉及变异操作迭代寻优;粒子群优化算法则通过模拟鸟群觅食行为,更新粒子速度和位置以寻找最优解。
|
机器学习/深度学习 人工智能 算法
|
算法 C语言
数据结构与算法——最小生成树问题(什么是最小生成树、Prim算法、Kruskal算法)
数据结构与算法——最小生成树问题(什么是最小生成树、Prim算法、Kruskal算法)
517 0
|
算法 C++
用prim和kruskal算法求最小生成树问题
用prim和kruskal算法求最小生成树问题
327 0
|
算法 C语言
最小生成树——Prim算法与Kruskal算法
最小生成树——Prim算法与Kruskal算法
1712 0
最小生成树——Prim算法与Kruskal算法
|
算法
数据结构上机实践第13周项目1 - 验证Prim算法的验证
数据结构上机实践第13周项目1 - 验证Prim算法的验证
264 0
数据结构上机实践第13周项目1 - 验证Prim算法的验证
|
机器学习/深度学习 算法
无向图的算法:Kruskal算法与Prim算法生成最小生成树
无向图的算法:Kruskal算法与Prim算法生成最小生成树
838 0
|
算法
Prim算法(最小生成树)
Prim算法(最小生成树)
397 0
Prim算法(最小生成树)

热门文章

最新文章