最小生成树

术语:

    树(Tree)

             不含圈的连通图称为树。

     生成树SpanningTree):

             设T是图G的一个子图,如果T是一棵树,且v(T) = v(G),则称T是G的一个生成树。// v()为点集。

      最小生成树MinimalSpanningTree):

             权值最小的生成树称为最小生成树。

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------


求解最小生成树问题,最常的两算法:Kruskal算法和Prim算法。


一、Prim算法:

基本概念:

       Prim算法是用于生成无向带权连通图的MST的一种算法,并且可以解决边权为负值的情况。Prim算法从任一顶点s开始,初始化V' ={s},每次贪心地选取跨越V与V - V' 的最小边,扩大现有的子树V‘,直到其遍及图中的所有顶点。

算法流程:

       (1) 标记所有点为未访问,初始化距离数组

       (2) 选定任一顶点作为起点,标记其已访问,dist = 0

       (3) 找出所有未访问过的点中距离值最小的点u,标记u已访问,将最后一次松弛的边加入生成树

       (4) 用点u的相邻边进行松弛,被松弛的点v记录下(u,v)这条边

       (5) 重复操作(3)和(4)直到所有点都访问过


二、Kruskal算法:

基本概念:

        Kruskal算法将图中的每一顶点视为一个独立的集合,首先将图中的所有边按权值从小到大排序,接着按顺序选择每条边,如果这条边的两个端点不属于同一个集合,那么将它们所在的集合合并,同时将这条边加入边集E‘。直到所有的顶点都属于同一个集合时,E’就是一棵最小生成树。

算法流程:

        1)将图G看做一个森林,每个顶点为一棵独立的树

        (2)将所有边加入集合S,即一开始S = E

        (3)从S中拿出一条最短的边(u,v),如果u和v不在同一棵树内,连接u,v合并两棵树,同时将(u,v)加入生成树的边集E

        (4)重复(3)直至所有点属于同一棵树,边集E’就是一棵最小生成树



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值