最小生成树(最小代价树)

本文介绍了图论中的最小生成树概念,包括Prim和Kruskal两种经典算法。最小生成树是在连通无向图中找到边权之和最小的树结构。Prim算法适用于边稠密图,从一个顶点开始逐步构建,每次添加代价最小的边;Kruskal算法则适合边稀疏图,通过选择权值最小且不形成环的边来构建。两种算法各有特点,时间复杂度分别为O(|𝑉|²)和O(|𝐸|log|𝐸|)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于一个带权连通无向图G=(V,E),生成树不同,每棵树的权(即树中所有边上的权值

之和)也可能不同。设R为G的所有生成树的集合,若T为R中边的权值之和最小的生成

,则T称为G的最小生成树(Minimum-Spanning-Tree,MST)

  • 最小生成树可能有多个,但边的权值之和总是唯一且最小的
  • 最小生成树的边数=顶点数-1。砍掉一条则不连通,增加一条边则会出现回路
  • 如果一个连通图本身就是一棵树,则其最小生成树就是它本身
  • 只有连通图才有生成树,非连通图只有生成森林

Prim算法(普利姆)

从某一个顶点开始构建生成树;

每次将代价最小的新顶点纳入生成树,直到所有顶点都纳入为止。

时间复杂度:O(|𝑉|2)——适合用于边稠密图

Prim算法思想

从𝑉0开始,总共需要n-1轮处理

每一轮处理:循环遍历所有结点,找到lowCast最低的,且还没加入树的顶点

再次循环遍历,更新还没加入各个顶点的lowCast值

每一轮时间复杂度:O(2n)

总时间复杂度:O(𝑛2),即0(|𝑉|2)

Kruskal算法(克鲁斯卡尔)

每次选择一条权值最小的边,使这条边的两头连通(原本已经连通的就不选)

直到所有结点都连通

时间复杂度:O(|E|log2|𝐸|)——适合用于边稀疏图

Kruskal算法思想

初始:将各条边按权值排序

共执行|E|轮,每轮判断两个顶点是否属于同一集合,不属于则连接起来,需要O(log2|E|)

总时间复杂度:O(|E|log2|E|)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值