贪心算法——最小生成树

贪心算法——最小生成树

何为最小生成树:

如图:

通俗一点呢 就是能连通图上所有点的一条不存在环的权重总和最小的路径

求最小生成树的两种算法

1.Kruskal算法

(1)流程

a.初始化:将图G=<V,E>初始化只有n个独立顶点的图,并按边权重从小到大排序;
b.依次遍历排序好的边,如果边eij的两个顶点vivj属于两个不同的连通分支,则将此边加入到图中,否则忽略该边。
如图

(2)割性质及其证明



此证明运用了反证法

(3)Kruskal算法具有最优子结构性质

Kruskal算法每次选择一条边e将两个不连通的图T1T2连成一棵树T,设T是最小生成树,则T1T2是它们节点集合的最小生成树。

证明:
通过反证法进行证明,假设T1(或者T2)是T1(或者T2)节>点集合的最小生成树,用边e将这两个不连通图T1T2连成一个树>T时:

W(T)=W(T1)+W(T2)+we<W(T1)+W(T2)+we=W(T)

这与T是最小生成树矛盾,引理得证。

Prim算法

(1)初始化:所有节点的weight值置为prev值设为null,选择任意节点作为根节点,跟节点的weight值置为0,prev值为自身,并将根节点放入T中(最终T为最小生成树),并将根节点设为当前节点。
(2)将所有和当前节点直接相连的节点weight进行更新,即如果当前节点相连的边的权重小于节点weight值,则更新,且将prev值设为当前节点,否则,不进行更新;
(3)在剩余节点(未加入到树中),选择一个weight值最小的节点加入到T中,并将此节点作为当前节点;
(4)重复步骤(2)和(3),直到所有的节点都加入到T中。
流程如图

关于Prim的定理证明

posted @   ThorErre  阅读(93)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示