图的应用3---生成树

生成树

对连通图进行遍历,过程中所经过的边和顶点的组合可看做是一棵普通树,通常称为生成树。

在这里插入图片描述

上图所示,左边是一张连通图,右边是其对应的 2 种生成树。
连通图中,由于任意两顶点之间可能含有多条通路,遍历连通图的方式有多种,往往一张连通图可能有多种不同的生成树与之对应。

连通图中的生成树必须满足以下 2 个条件:
包含连通图中所有的顶点;
任意两顶点之间有且仅有一条通路;

因此,连通图的生成树具有这样的特征,即生成树中边的数量 = 顶点数 - 1。

最小生成树

加权图的最小生成树是一棵生成树,其所有边的权值之和不会大于其它任何生成树。

最小边原则:图中权值最小的边(如果唯一的话)一定在最小生成树上。

唯一性:一棵生成树上,如果各边的权都不相同,则最小生成树是唯一的。反之不然。

生成森林

生成树是对应连通图来说,而生成森林是对应非连通图来说的

我们知道,非连通图可分解为多个连通分量,而每个连通分量又各自对应多个生成树(至少是 1 棵),因此与整个非连通图相对应的,是由多棵生成树组成的生成森林。

在这里插入图片描述
上图所示,是一张非连通图,可分解为 3 个连通分量,其中各个连通分量对应的生成树如下图所示:

在这里插入图片描述
注意,上图中列出的仅是各个连通分量的其中一种生成树。

因此,多个连通分量对应的多棵生成树就构成了整个非连通图的生成森林

最小生成树解法

最小生成树可以用一下两种算法求解:

  1. 无向图的最小生成树(贪心思想)
    Prim算法,适用于点少的图
    Kruskal算法,适用于边少的图
  2. 有向图的最小树形图

生成树和最小生成树有许多重要的应用。

例如:要在n个城市之间铺设光缆,主要目标是要使这n个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此另一个目标是要使铺设光缆的总费用最低。这就需要找到带权的最小生成树。

Prim算法构建最小生成树的过程

例:

在这里插入图片描述

Kruskal算法构建最小生成树的过程

例:

在这里插入图片描述

Kruskal算法简单描述

1).记Graph中有v个顶点,e个边

2).新建图Graph_new,Graph_new中拥有原图中相同的e个顶点,但没有边

3).将原图Graph中所有e个边按权值从小到大排序

4).循环:从权值最小的边开始遍历每条边 直至图Graph中所有的节点都在同一个连通分量中

            if 这条边连接的两个节点于图Graphnew中不在同一个连通分量中,添加这条边到图Graphnew中
示例图演示:

在这里插入图片描述

参考:

水火379:https://www.cnblogs.com/zhangming-blog/p/5414514.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值