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

1.问题

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

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

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

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

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

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

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

2.解析

(1).记Graph中有v个顶点。e个边
(2).新建图Graphnew,Graphnew中拥有原图中同样的e个顶点,但没有边
(3).将原图Graph中全部e个边按权值从小到大排序
(4).循环:从权值最小的边開始遍历每条边直至图Graph中全部的节点都在同一个连通分量中,if 这条边连接的两个节点于图Graphnew中不在同一个连通分量中则增加这条边到图Graphnew中

图例描写叙述:
首先第一步。我们有一张图Graph,有若干点和边

将全部的边的长度排序,用排序的结果作为我们选择边的根据。
这里再次体现了贪心算法的思想。资源排序,对局部最优的资源进行选择,排序完毕后。我们领先选择了边AD。这样我们的图就变成了下图

在剩下的变中寻找。我们找到了CE。

这里边的权重也是5

依次类推我们找到了6,7,7,即DF。AB,BE。

以下继续选择, BC或者EF虽然如今长度为8的边是最小的未选择的边。可是如今他们已经连通了(对于BC能够通过CE,EB来连接,相似的EF能够通过EB,BA,AD,DF来接连)。所以不须要选择他们。
相似的BD也已经连通了(这里上图的连通线用红色表示了)。
最后就剩下EG和FG了。当然我们选择了EG。

3. 设计

伪代码:
算法:Kruskal(G)
//构造最小生成树的Kruskal算法
//输入:加权连通图G= <V, E>
//输出:ET,组成G的最小生成树的边的集合
按照边的权重w(ei1)≤…≤w(ei|E|)的非递减顺序对集合E排序
ET←∅;ecounter←0 // 初始化树中边的顶点集合以及集合的规模
k←0 			//初始化已处理的边的数量
while ecounter←0|V| -1 do
	k←k+1
	if  ET∪{eik}无回路
	ET←ET∪{eik}; ecounter ← ecounter + 1
return ET

实验截图:

4. 源代码地址

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值