最小生成树

本文介绍了最小生成树的概念及其重要性质,包括切分定理。通过贪心算法,详细阐述了Prim的延时算法和即时算法,并对比了Kruskal算法的实现方式。这些算法都是用于在加权图中找到权重总和最小的树形子图,即最小生成树。

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

最小生成树

 

树的性质:

1.      用一条边连接任意两个新的顶点都会产生一个新的环

2.      从树中删掉一条边会得到两棵新的树

切分定理:
由上述两条性质可以得到切分定理:

(切分是将图中的顶点分为两个不同的集合,然后比较其横切边的权值)

(横切边是一条连接两个顶点的不同的边)

 

在一幅加权图中,给定任意的切分,它的横切边中最小者一定属于最小生成树。

(证明:利用反证法,假设最小生成树不包含其中一条最小的横切边E,那么将E加入到最小生成树中,根据树的性质,将会形成一个环。这个环中一定包含另外的一条横切边F,且F的权重一定大于E。若原图删掉F,则得到两棵树,以E连接后最小生成树的权重更小。)

贪心算法:

使用切分定理找到最小生成树的一条边,更换切分方式,找到另外的一条边,重复此过程,直到找到所有属于最小生成树的边(N-1)。

 

 

Prim 延时算法:

逐步添加,每一步为生长中的树添加一条边。当添加一条边时(优先队列中权重最小的边),同时也包含了一个节点,此节点与这时不在生成树中的相邻节点的连线需添加到优先队列中去,此节点与这时在生成树中的节点相连的边变为失效的边,应在优先队列中删除。重复此过程,直到找到所有的边(N-1)。

 

Prim 即时算法:

与延时算法大体相同,但不同的是对优先队列的操作。优先队列保证非生成树的节点与已经生成的树节点之间的边是权重最小的。即延时算法中本应加入到优先队列中的权重大的边可能在即时算法中被忽略而不对优先队列产生影响。

 

Kruskal 算法:

Prim算法是一条边一条边地构造,kruskal算法也是。不同的是,kruskal算法构造最小生成树的时候有可能会产生森林,最后会生成最小生成树。

 

按权重排序所有的边,选权重最小的边加入到最小生成树中,同时删除新加入的节点与生成树节点相连的边。重复直到找到所有的边。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值