最小生成树——Prim、Kruskal、Sollin(Boruvka)
本文内容框架:
1.Prim算法及其基于优先队列实现
2.Kruskal算法
3.Sollin算法
对于最小生成树,有两种算法可以解决。一种是Prim算法,该算法的时间复杂度为O(n²),与图中边数无关,该算法适合于稠密图,而另外一种是Kruskal,该算法的时间主要取决于边数,它较适合于稀疏图。
Prim算法
Prim算法描述
设图G =(V,E),其生成树的顶点集合为U。
①、把v0放入U。
②、在所有u∈U,v∈V-U的边(u,v)∈E中找一条最小权值的边,加入生成树。
③、把②找到的边的v加入U集合。如果U集合已有n个元素,则结束,否则继续执行②。
时间复杂度
最小边、权的数据结构 | 时间复杂度(总计) |
---|---|
邻接矩阵、搜索 | O(V2) |
二叉堆(后文伪代码中使用的数据结构)、邻接表 | O((V + E) log(V)) = O(E log(V)) |