[算法系列之二十七]Kruskal最小生成树算法

简介:

简介

求最小生成树一共有两种算法,一个是就是本文所说的Kruskal算法,另一个就是Prime算法。在详细讲解Kruskal最小生成树算法之前,让我们先回顾一下什么是最小生成树。

我们有一个带权值的图,我们要求找到一个所有生成树中具有最小权值的生成树。如下图所示,T是图G的生成树。但不是具有最小权值的生成树。

这里写图片描述

我们可以把他们想象成一组岛屿和连接它们的可能的桥梁。当然修桥是非常昂贵和费时的,所以我们必须要知道建设什么样的桥梁去连接各个岛。不过有一个重要的问题,建设这样一组连接所有岛屿的桥梁的最低价格是多少。

这里写图片描述

我们实际上需要构建一棵最小生成树,顶点表示岛屿,而边表示它们之间可能要修建的桥梁。每一个可能修建的桥梁都有相应的权值(表示我们建造它所花费的时间和金钱等)。

在实践中,我们只可能使用一个最小生成树的可能用例。(This scenario is only one of possible use cases of where minimum spanning trees can be used in practice.)

概要

Kruskal算法开始由初始化一组集合,并建立| V|棵树,每棵树都只包含了图的一个顶点。

这里写图片描述

在建设最后生成树的过程中,我们维护一个森林。很显然,我们由|V|棵树组成的森林开始,其中每个树都只有是一个节点。

这里写图片描述

在某些时候,我们有“K”棵树组成的森林,这几棵树都最小生成树的子树。

这里写图片描述

构建最终的最小生成树最后一个步骤之前,我们有两个树(如上图的3),我们用剩下的最小权值边来连接这两棵树。

构建树的过程中,我们按照权值的升序,对边进行排序。

这里写图片描述

然后,获取边,检查每条边(u,v),其端点u和v是否是属于同一棵树。如果是,把(u,v)加入森林中就会形成一个回路,所以放弃这条边(u,v)。否则,说明两个顶点分属不同的树。

这里写图片描述

关于Kruskal算法一个很大的特点是,它也可以用在非连同图中。

原文

Computer Algorithms: Kruskal’s Minimum Spanning Tree

目录
相关文章
|
4月前
|
算法 索引
class061 最小生成树【算法】
class061 最小生成树【算法】
44 0
|
6月前
|
算法
最小生成树算法:Prim算法
在图论中,最小生成树(Minimum Spanning Tree,简称MST)是一种常用的算法问题。最小生成树是指在一个加权连通图中选取边的子集,使得所有顶点都被覆盖,并且边的总权值最小。
159 0
|
8天前
|
存储 机器学习/深度学习 算法
上机实验三 图的最小生成树算法设计 西安石油大学数据结构
上机实验三 图的最小生成树算法设计 西安石油大学数据结构
17 1
|
2月前
|
算法 Java C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-6 算法训练 安慰奶牛 最小生成树
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-6 算法训练 安慰奶牛 最小生成树
23 0
|
4月前
|
算法 搜索推荐
Kruskal算法
Kruskal算法
|
5月前
|
算法 C++
用prim和kruskal算法求最小生成树问题
用prim和kruskal算法求最小生成树问题
47 0
|
8月前
|
存储 算法 C++
最小生成树问题及Kruskal算法的解析
最小生成树问题及Kruskal算法的解析
71 2
|
10月前
|
算法 容器
【算法入门&图论】【模板】拓扑排序|【模板】单源最短路2 |最小生成树(下)
【算法入门&图论】【模板】拓扑排序|【模板】单源最短路2 |最小生成树
80 0
|
10月前
|
存储 算法 UED
【算法入门&图论】【模板】拓扑排序|【模板】单源最短路2 |最小生成树(上)
【算法入门&图论】【模板】拓扑排序|【模板】单源最短路2 |最小生成树
50 0
|
10月前
|
算法 C++ Python
最小生成树算法
最小生成树算法
74 0

热门文章

最新文章