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,有若干点和边

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

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

Kruskal构造最小生成树问题-算法分析与实践作业1-1_第2张图片

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

Kruskal构造最小生成树问题-算法分析与实践作业1-1_第3张图片

这里边的权重也是5

Kruskal构造最小生成树问题-算法分析与实践作业1-1_第4张图片

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

Kruskal构造最小生成树问题-算法分析与实践作业1-1_第5张图片

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

3. 设计

伪代码:
算法:Kruskal(G)
//构造最小生成树的Kruskal算法
//输入:加权连通图G= 
//输出: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

实验截图:

Kruskal构造最小生成树问题-算法分析与实践作业1-1_第6张图片

4. 源代码地址

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

你可能感兴趣的:(算法分析与实践作业)