day 15 最小生成树

143 阅读1分钟
  1. 最小生成树(无向图)
    1. 普利姆算法:
      1. 朴素版 Prim算法(O(n2n^2)):适用于稠密图。

        • 基本思路:从任意一个顶点开始,逐步选择与当前生成树连接的权值最小的边,直到生成树包含所有顶点。
        • 算法步骤:
          1. 初始化一个空的生成树和一个集合visited,将起始顶点加入visited。
          2. 循环n-1次(n为顶点数):
            • 在visited集合外找到与当前生成树连接的最小权值边(u, v),其中u在visited中,v不在visited中。
            • 将边(u, v)加入生成树,将v加入visited集合。
          3. 输出生成树。
          4. 简单实现:code.png
      2. 堆优化版 Prim算法(O(mlogn)):适用于稀疏图。

        • 基本思路:通过最小堆来选择与当前生成树连接的权值最小的边,提高算法效率。
        • 算法步骤:
          1. 初始化一个空的生成树和一个集合visited,将起始顶点加入visited。
          2. 将与起始顶点相邻的边加入最小堆。
          3. 循环n-1次(n为顶点数):
            • 从最小堆中选择权值最小的边(u, v),其中u在visited中,v不在visited中。
            • 将边(u, v)加入生成树,将v加入visited集合。
            • 将与顶点v相邻的未访问顶点的边加入最小堆。
          4. 输出生成树。