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

导读:本篇文章讲解 【数据结构与算法】最小生成树,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com


一、连通图

连通:在一个无向图 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. 什么是连通图,(强)连通图详解

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118953.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!