图论入门八:Kruskal算法

前面说过,Kruskal是从最短边着手构建最小生成树的。其基本过程是:先对图中的所有边按照权重值从小到大进行排序,然后着手选取边构建最小生成树。如果直接从小到大按顺序选取,有可能形成了环,所以对环的处理就成了核心问题。
我们还是以前面的乡镇假设光纤网络为例:

 

Kruskal算法工作步骤如下:

(1) 将边进行排序。

(2) 按权重依次从小到大将边加入最小生成树。

(3) 检查新加入的边是否构成了环。

 

怎样判断构成了环?判断原理也很简单:最小生成树加入一条边从而构成环,那么这条边的两个顶点除了这条边外,必然还有另一条路径,即这两个顶点在加入这个边之前,就是连通的,或者在一个连通子图上。

因此,在G=(V,E)中,我们令最小生成树的初始状态为只有n个顶点,0条边的非连通图T=(V,{E}),图中每个顶点都是一个连通子图,即有n个连通子图。依次从E中按顺序从小到大选择边,若该边的两个顶点落在T中不同的连通子图上,则将此边加入到T中,否则舍去此边,依次类推,直到T中所有顶点都在同一个连通子图上为止。

该算法的主要执行过程在最后的for循环处,find_connect函数与顶点的个数V决定,时间复杂度为O(logV),而外面是边E的循环,因此Kruskal算法的时间复杂度为O(E logV)。

【传送门】

图论入门一:图的基本概念

图论入门二:树的基本概念

图论入门三:图的遍历

图论入门四:BFS与DFS

图论入门五:邻接表与邻接矩阵

图论入门六:哥尼斯堡七桥问题

图论入门七:最小生成树

图论入门八:Kruskal算法

图论入门九:Prim算法

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值