【数据结构与算法】最小生成树


一、连通图

连通:在一个无向图 G 中,若从顶点 i 到顶点 j 存在至少一条路径(当然从 j 到 i 也一定有路径),则称 i 和 j 是连通的。如果 G 是有向图,那么连接 i 和 j 的路径需要是双向的。

连通图:无向图中,如果任意两个顶点之间都能够连通,则称此无向图为连通图。如果此图是有向图,则称为强连通图(注意:需要双向都有路径)。

连通分量:若无向图不是连通图,但图中的某个子图符合连通图的性质,则称该子图为连通分量。(需要注意的是,连通分量的提出是以 “整个无向图不是连通图” 为前提的,因为如果无向图是连通图,则其无法分解出多个最大连通子图,因为图中所有的顶点之间都是连通的。)

图的连通性是图的基本性质。


二、生成树

一个连通图的生成树是一个极小的连通子图,它包含图中全部的 n 个顶点,但只有构成一棵树的n-1条边。

在这里插入图片描述
生成树的属性:

  • 一个连通图可以有多个生成树;
  • 一个连通图的所有生成树都包含相同的顶点个数和边数;
  • 生成树当中不存在环;
  • 移除生成树中的任意一条边都会导致图的不连通, 生成树的边最少特性;
  • 在生成树中添加一条边会构成环。
  • 对于包含n个顶点的连通图,生成树包含n个顶点和n-1条边;
  • 对于包含n个顶点的无向完全图最多包含 nn-2 颗生成树。

三、最小生成树

所谓一个 带权图 的最小生成树,就是原图中 边的权值最小 的生成树 ,所谓最小是指边的权值之和小于或者等于其它生成树的边的权值之和。

注意:首先最小生成树是和带权图联系在一起的;如果仅仅只是非带权的图,只存在生成树。


四、最小生成树算法

如何从原图得到最小生成树呢?

  1. Kruskal算法
    克鲁斯卡尔算法(Kruskal)是一种使用贪婪方法的最小生成树算法。 该算法初始将图视为森林,图中的每一个顶点视为一棵单独的树。 一棵树只与它的邻接顶点中 权值最小 且不违反最小生成树属性(不构成环)的树之间建立连边。

  2. Prim算法
    普里姆算法在找最小生成树时,将顶点分为两类,一类是在查找的过程中已经包含在生成树中的顶点(假设为 A 类),剩下的为另一类(假设为 B 类)。
    对于给定的连通网,起始状态全部顶点都归为 B 类。在找最小生成树时,选定 任意 一个顶点作为起始点,并将之从 B 类移至 A 类;然后找出 B 类中到 A 类中的顶点之间权值最小的顶点,将之从 B 类移至 A 类,如此重复,直到 B 类中没有顶点为止。所走过的顶点和边就是该连通图的最小生成树。


参考链接

  1. 图解:什么是最小生成树?
  2. 什么是连通图,(强)连通图详解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值