算法导论笔记:23最小生成树

本文详细介绍了最小生成树的概念,通过通用算法描述贪心策略,并重点讲解了Kruskal和Prim两种算法的工作原理及其实现方式。Kruskal算法依赖不相交集合数据结构,Prim算法则通过最小优先队列逐步构建树。
摘要由CSDN通过智能技术生成

       一个连通无向图G=(V, E),每条边(u, v) ∈ E,都有权重w(u, v),希望找到一个无环子集T E,既能够将所有节点都连接起来,又具有最小的权重。由于T是无环的,并且能连接所有的节点,所以T必然是一棵树,成T为最小生成树最小生成树不唯一。

 

一:最小生成树的形成

       本章所讨论的两种算法都采用贪心策略,这个贪心策略由下面的通用算法描述:

       GENERIC-MST(G, w)

              A =∅

              while A does not form a spanningtree

                     find an edge (u, v) that issafe for A

                     A = A {(u, v)}

              return A

 

       该通用算法遵循循环不变式:在每次循环之前,A是某颗最小生成树的一个子集。我们要做的主要事情就是选择一条边(u, v),将其加入到集合A中,使得A不违反循环不变式,也就是A∪ {(u,v)}也是某颗最小生成树的子集。称这样的边(u, v)为集合A的安全边

 

       算法的关键就在于如何找到安全边,下面介绍找安全边的规则:

       无向图G=(V, E)的一个切割(S, V-S)是集合V的一个划分,如下图所示,如果一条边(u, v)∈ E的一个端点位于集合S,另一个端点位于集合V-S,则称该条边横跨切割(S, V-S)。如果集合A中不存在横跨该切割的边,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值