Prim算法

算法思想
从图中任意取出一个顶点,把他当成一棵树,然后从与这棵树相接的边中选取一条最短(权值最小)的边,并将这条边及其所连接的顶点也并入这棵树中,此时得到一棵有两个顶点的树。然后从与这棵树相接的边中,再选取最短(权值最小)的边,并将这条边及其所连顶点并入当前树,得到一棵3个顶点的树。重复操作,直到图中所有顶点并入树中,此时得到的生成树就是最小生成树。

算法步骤

  • 输入:一个加权连通图,其中顶点集合为V,边集合为E
  • 初始化:Vnew = {x},其中x为集合V中的任一节点(起始点),Enew = {},为空
  • 重复下列操作,直到Vnew = V
    ◆ 在集合E中选取权值最小的边<u,v>
    其中:u∈集合Vnew,而v≮集合Vnew
    ◆ 将v顶点加入集合Vnew,将<u,v>边加入集合Enew
  • 输出:使用集合Vnew和Enew来描述所得到的最小生成树

时间复杂度

最小边、权的数据结构 时间复杂度(总计)
邻接矩阵、搜索 O(V²)

图例

Prim算法的核心就是挑边,其中边的一端在Vnew集合,而另一端在V集合.
数据结构:Prim算法&Kruskal算法
数据结构:Prim算法&Kruskal算法

Kruskal算法

算法思想:每次找出侯选边中权值最小的边,就将该边并入生成树中,重复此过程直到所有的边都被检测完为止。

在剩下的所有未选取的边中,找最小边,如果与已选取的边构成回路,则放弃,选取次小边.

数据结构:Prim算法&Kruskal算法

Prim算法和Kruskal算法都针对于无向图。

相关文章: