秒懂算法 | Prim算法

举报
TiAmoZhang 发表于 2023/02/24 09:06:33 2023/02/24
【摘要】 实例演示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


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。