Prim算法构造最小生成树问题-算法分析与实践作业1-2

1.问题

带权图:边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权。

最小生成树(MST):权值最小的生成树。

最小生成树的性质:假设G=(V,E)是一个连通网,U是顶点V的一个非空子集。若(u,v)是一条具有最小权值的边,其中u∈U,v∈V-U,则必存在一棵包含边(u,v)的最小生成树。

完成构造网的最小生成树必须解决下面两个问题:

  (1)尽可能选取权值小的边,但不能构成回路;

  (2)选取n-1条恰当的边以连通n个顶点;

例如:几座城市为顶点,飞机从一座城市飞向另一座城市,这个机票就是两座城市间的权重,然后每座城市都要飞一遍,每座城市只能到达一次,最后花费的机票钱最少的路线就是最小生成树。

2.解析

1).输入:一个加权连通图。当中顶点集合为V,边集合为E;

2).初始化:Vnew = {x},当中x为集合V中的任一节点(起始点),Enew = {},为空;

3).反复下列操作,直到Vnew = V:

a.在集合E中选取权值最小的边<u, v>,当中u为集合Vnew中的元素。而v不在Vnew集合当中。而且v∈V(如果存在有多条满足前述条件即具有同样权值的边,则可随意选取当中之中的一个);

b.将v增加集合Vnew中,将<u, v>边增加集合Enew中。

4).输出:使用集合Vnew和Enew来描写叙述所得到的最小生成树。

图例说明不可选可选已选(Vnew)
此为原始的加权连通图。每条边一側的数字代表其权值。---
顶点D被随意选为起始点。顶点A、B、E和F通过单条边与D相连。A是距离D近期的顶点。因此将A及对应边AD以高亮表示。C, GA, B, E, FD
下一个顶点为距离D或A近期的顶点。B距D为9,距A为7。E为15。F为6。因此,F距D或A近期,因此将顶点F与对应边DF以高亮表示。C,GB, E, FA,D
算法继续反复上面的步骤。距离A为7的顶点B被高亮表示。CB,E,GA,D
在当前情况下,能够在C、E与G间进行选择。C距B为8,E距B为7,G距F为11。E近期。因此将顶点E与对应边BE高亮表示。C,E,GA,D,F,B
这里。可供选择的顶点仅仅有C和G。C距E为5。G距E为9,故选取C,并与边EC一同高亮表示。C,GA,D,F,B,E
顶点G是唯一剩下的顶点,它距F为11,距E为9,E近期。故高亮表示G及对应边EG。GA,D,F,B,E,C
如今,全部顶点均已被选取,图中绿色部分即为连通图的最小生成树。在此例中,最小生成树的权值之和为39。A, D, F, B, E, C, G

3. 设计

算法:Priim(G)
//构造最小生成树的Prim算法
//输入:加权连通图G=<V, E>
//输出:ET,组成G的最小生成树的边的集合
VT←{V0}  //可以用任意点来初始化树的顶点集合
ET←∅
for i←1 to |V| -1 do
	在所有的边(v, u)中,求权重最小的边e* = (v*, u*)
	使得v在VT中,而u在V-VT中
	VT←VT∪{u*}
	ET←ET∪{e*}
return ET

实验截图:

4. 源代码地址

https://github.com/Lin02993/Algorithm-Analysis-and-Practice-on-the-job

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值