[算法导论笔记]--最小生成树

本文介绍了最小生成树的概念,包括其定义和形成的贪心策略。详细阐述了Kruskal和Prim算法,讨论了它们的时间复杂度,并给出了算法的伪代码。同时,文章引用《算法导论》中的定理和推论,证明了算法的有效性。
摘要由CSDN通过智能技术生成

最小生成树的定义

假定有一个连通无向图G=\left ( V,E \right ),其中V是节点集合,E表示节点间的边的集合,对于每条边(u,v)\in E,具有权重w(u,v).这里希望找到一个无环子集T\sqsubseteq E,既能够将所有节点连接起来,又具有最小的权重和。我们就称之为一个最小生成树

解决最小生成树问题的算法,常见的为Kruskal算法和Prim算法。如果使用普通的二叉堆,那么可以很容易地把这两个算法的时间复杂度限制在O(ElogV)数量级内。但是如果使用斐波那契堆,则Prim算法的运行时间将改善为O(E+logV),此运行时间在|V|远小于|E|的情况下较二叉堆有较大改进。

 

一、最小生成树的形成

假定有一个无向连通图G=\left ( V,E \right )和权重函数w,若希望找出G的一个最小生成树,先前所提及的两种算法都采取了贪心策略

这个贪心策略可以用以下方式来描述。该方式在每个时刻生长最小生成树的一条边,并且在整个策略的实行过程中,做出如下保证:

       在每遍循环前,A是某棵最小生成树的一个子集。

在每一步,我们要做的事就是选择一条边(u,v),让其加入到集合A中,使得A不违反循环不变式,即A\cup \left \{ (u,v)\right \}也是某棵最小生成树的子集。由于可以安全地将这种边加入到集合A而不会破坏A的循环不变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值