最小生成树

最小生成树的形成

几个定义:

  1. 最小生成树问题
    在一个图中,找到一个无环的路径,把所有结点连接起来,又具有最小的权重。
  2. 生成方法:添加安全边。
    安全边:选择一条边(u,v),将其加入到集合A中(A是某颗最小生成树的子集),使得新的A仍是最小生成树的子集,由于我们可以安全地将这种边加入到集合A而不破坏A的循环不变式,因此称这样的边为集合A的安全边。
    生成最小生成树
  3. 如何找到安全边?
    切割:就是将一个图划分为两部分,S和V-S。
    边横跨切割:如果一条边(u,v)一个端点在S,一个端点在V-S,则称该边横跨切割(S,V-S)。
    切割尊重集合A:如果集合A中不存在横跨该切割的边,则称该切割尊重集合A。(也就是说集合A没有被切割)
    轻量级边:横跨切割的边中权重最小的边。可能不唯一。
    在这里插入图片描述
    搞清了定义,再来看给出如何选择安全边的一个定理:
    在这里插入图片描述
    这个定理的证明使用剪切粘贴法。
    在这里插入图片描述

算法

Kruskal算法

贪心算法,每次选择一条权重最小的边加入到森林。(找全图中最小权重的边)
时间复杂度: O ( E V ) O(EV) O(EV)
在这里插入图片描述
1-3行,初始化A为空集合,并创建|V|颗树,每棵树1个结点。
如果u,v不是同一颗树,且 边(u,v) 权重最低,就将其加入到集合A中,并合并两棵树。

Prim算法

与Dijkstra的最短路径法相似。从任意的根结点作为A中结点开始,每一步连接集合A和A之外的结点的轻量级边,直到覆盖V中所有结点为止。也是贪心算法,每一步加入的边都必须是使树的总权重增加量最小的边。(找和A相连的权重最小的边)
时间复杂度: O ( V 2 ) O(V^2) O(V2)
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值