Kruskal算法的改进(基于Tarjan算法)(个人想法)

本文介绍了如何利用Tarjan算法改进Kruskal算法以找到图的最小生成树。传统的Kruskal算法通过增边策略找到最小生成树,而改进版算法则在边数小于2倍顶点数时采用删边策略,通过Tarjan算法快速判断边是否为桥,以提高效率。在某些情况下,如图有10000个顶点,10001条边,改进后的算法只需2次删边操作即可完成,相比原始算法的9999次增边操作更高效。
摘要由CSDN通过智能技术生成

正常的kruskal算法如下:

对应的步骤为(数字对应上图步骤):

1、初始化生成树的边集A为空集

2、对集合中的每一个顶点,都将它的集合初始化为自身

4、将边按权值进行排序

5、对排序好后的边从小到大进行判断,如果这条边所连的2个顶点不在同一个集合中,则将这条边加入到生成树的边集A中,并将此边所连的两个顶点u和v的集合做一个Union操作,如此循环加到生成树中的边集数量为n-1时停止

 

现在利用Tarjan算法对其进行改进:

Tarjan算法是用来求一个图中的桥的,其只需要做一次DFS(时间复杂度为O(V+E)),就可以找到一个图中所有的桥

假设图的顶点数为v,边数为e

在正常的kruskal算法中,其采用的是增边策略,即每次增加权值最小的且不构成环的边,一直增加到边数为v-1为止,正常策略就是将边进行排序,每次选一条最小的边,利用并查集判断这条边是否会构成环,如果不构成,则加入到生成树的边中,如此往复直到边数为v-1

那么我们同样可以采取删边策略,每次从图中删去一条权值最大的非桥的边,一直删到边树为v-1,那么所剩下的边即为最小生成树,由于Tarjan算法的存在,使得判

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值