最小生成树
构造成连通网的最小代价生成树(MinimumCostSpanningTree)称为最小生成树(简称MST)。
- 最小化生成树的构造方法
- 普利姆(Prim)算法
- 克鲁斯卡尔(Kruskal)算法
Prim算法
思想
- G=(V,E)是具有n个顶点的连通图,设U是最小生成树中顶点的集合,TE是最小生成树中边的集合;
- 初始,U={u1},TE={ }
- 重复执行:
在所有u∈U,v∈V-U的边(u,v)中寻找代价最小的边(u’,v’),并纳入集合TE中;
同时将v’纳入集合U中; - 直至U=V为止。
-
集合TE中必有n-1条边
普利姆算法的时间复杂度为O(n2),与网中的边数无关,因此适用于求边稠密的网的最小生成树。
Kruskal算法
思想
使用贪心准则,从剩下的边中选择具有最小权值且不会产生环路的边加入到生成树的边集中。
基本操作:
- 确定权值最小的边
- 判断一条边所关联的两个顶点是否在一个联通分量中;
- 如果不是则合并两个顶点所属的连通分量
Prim算法
- 算法时间复杂度:O(n2)
- 与边的个数无关
- 适合于求边稠密的图的最小生成树
Kruskal算法
- 算法时间复杂度:O(e loge) e为图边的数目
- 适合于求边稀疏的图的最小生成树