最小生成树
定义:
一个连通无向图G=(V,E)来表示,V是顶点的集合,E是边的集合。我们对于每条边(u,v)属于边的集合,w(u,v)是边的权重,我们希望找到一个无环子集,使得所有点连通,并且w(T)=∑w(u,v)最小。
可以认为各个城市有多种修路方法,距离各不一样,从这些修路方法中找到一个使得修路的总和最小。
伪代码(框架)
摘自《算法导论4》
寻找的安全边,其实就是分隔两个子集的轻量级边(最小边),不一定只有一条,因此不一定是只有一种最小生成树(贪心算法的体现->可以学习一下证明过程,有助于对贪心的理解)。
Kruskal算法和Prim算法
区别:
Prim算法是直接查找,多次寻找邻边的权重最小值,基于一颗树,使用与点比较少的时候
而Kruskal是需要先对权重排序后查找的,基于多棵树,即森林,使用与点比较多的图
具体详解可以参考大神博客:
https://www.cnblogs.com/zhangming-blog/p/5414514.html
力扣练习时发现最小生成树的完整题目很少,或者就是会员题,但是kruskal算法需要判断集合是否是两个集合的并查集算法倒是很常用。
来题: