![](https://csdnimg.cn/release/download_crawler_static/89330720/bg1.jpg)
最小生成树(Minimum Spanning Tree,MST)是一个有 n 个结点的连通图的生成树,
这个生成树具有两个重要的特性:
它包含原图中的所有 n 个结点。
它有保持图连通的最少的边,并且这些边的权重和在所有生成树中是最小的。
换句话说,最小生成树是原图的一个子集,它是一棵树(没有环),连接了所有的结点,
并且所使用的边的权重和是最小的。
求解最小生成树的算法主要有以下几种:
Prim 算法(普里姆算法):该算法从一个起始顶点开始,逐步扩展生成树。在每一步
中,它都选择一条连接当前生成树和一个不在生成树中的顶点、且权重最小的边,然后
将这条边和对应的顶点添加到生成树中。这个过程一直持续到所有顶点都被包含在生成
树中。
Kruskal 算法(克鲁斯卡尔算法):这个算法首先将所有边按照权重从小到大排序。然
后,它按照权重从小到大的顺序选择边,并将这些边添加到生成树中,但要保证添加边
后不会形成环。这个过程一直持续到生成树中包含所有顶点,或者所有边都被考虑过。
最小生成树(Minimum Spanning Tree,MST)是一个有 n 个结点的连通图的生成树,
它包含原图中的所有 n 个结点,并且有保持图连通的最少的边。同时,最小生成树也是
所有生成树中边的权重和最小的那棵。最小生成树常常用于解决在图中连接所有节点并
且使总的边权最小的问题。
最小生成树的求解算法有多种,常见的包括:
Prim 算法(普里姆算法):从一个起始顶点开始,逐步扩展生成树,每次选择一个与
当前生成树距离最小的顶点加入,直到所有顶点都被包含在生成树中。
Kruskal 算法(克鲁斯卡尔算法):首先将图的所有边按照权值从小到大排序,然后依
次选择权值最小的边加入生成树中,但要保证加入边后不会形成环,直到生成树中包含
所有顶点,或者图中的所有边都被考虑过。
Boruvka 算法(博鲁卡尔算法):将图的所有顶点分成多个不相交的集合,每个集合中
的顶点组成一棵生成树,然后每次选择具有最小权值且连接两个不同集合的边加入生成
树中,直到只剩下一个集合。
Jarnik 算法(加尔尼克算法):也称为更改版的 Prim 算法,首先选择一个起始顶点加
入生成树中,然后通过比较当前生成树中的顶点到其他顶点的距离,选择一个距离最小
的顶点加入生成树,重复该过程直到所有顶点都被包含在生成树中。
最小生成树的要点和难点可以总结如下:
要点:
目的:找到连接所有节点的最小权重边集合,确保图中所有节点都连通且边的总权重最
小。
基本属性:
最小生成树是一个子图,它包含原图中的所有节点。
最小生成树是一个无环的连通图,即一棵树。