数据结构笔记chapter06_4_1_最小生成树

1.概念

2.Prim算法

3.Kruskal算法

1.概念

(1)生成树

连通图的生成树是包含图中全部顶点的一个极小连通子图。(边尽可能的少, 但要保持连通)

若图中顶点数为n,则它的生成树含有 n-1 条边。对生成树而言,若砍去它的一条边,则会变成非连通 图,若加上一条边则会形成一个回路。

(2)最小生成树(最小代价树)

道路规划要求:所有地方都连通,且成本尽可能的低

对于⼀个带权连通⽆向图G = (V, E),⽣成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。

设R为G的所有⽣成树的集合,若T为R中边的权值之和最⼩的⽣成树,则T称为G的最⼩⽣成树(Minimum-Spanning-Tree, MST)

• 最⼩⽣成树可能有多个,但边的权值之和总是唯⼀且最⼩的

• 最⼩⽣成树的边数 = 顶点数 - 1。砍掉⼀条则不连通,增加⼀条边则会出现回路

• 如果⼀个连通图本身就是⼀棵树,则其最⼩⽣成树就是它本身

• 只有连通图才有⽣成树,⾮连通图只有生成森林

2.Prim算法(普里姆算法)

从某⼀个顶点开始构建生成树; 每次将代价最小的新顶点纳入生成树,直到所有顶点都纳入为止。

实现思想:

初始:从V0开始

标记各节点是 否已加⼊树:isJoin

各节点加⼊树 的最低代价:lowCost

第1轮:循环遍历所有个结点,找到lowCost最低的,且还没加⼊树的顶点

再次循环遍历,更新还没加⼊的各个顶点的lowCost值

第2轮:循环遍历所有个结点,找到lowCost最低的,且还没加⼊树的顶点

再次循环遍历,更新还没加⼊的各个顶点的lowCost值

...

3.Kruskal算法(克鲁斯卡尔)

每次选择⼀条权值最⼩的边,使这条边的两头连通(原本已经连通的就不选),直到所有结点都连通。

实现思想:

初始:将各条边按权值排序

第1轮:检查第1条边的两个顶点是否 连通(是否属于同⼀个集合)

第2轮:检查第2条边的两个顶点是否 连通(是否属于同⼀个集合)

...

共执⾏ e 轮,每轮判断两个顶点是 否属于同⼀集合,需要 O(log_2(e))

总时间复杂度 O(elog2_(e))

4.对比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值