[Data Structure & Algorithm] 无向图的最小生成树

最小生成树(Minimum Spanning Tree) - 连接所有顶点的边的权值之和最小的树

Prim算法

  • 基本思路 - 设 图的顶点集合为V;其最小生成树的顶点集合为U
    1. 将某个顶点放入U
    2. 在一个顶点属于U,另一个顶点属于V-U的所有的边中,找到权值最小的边
    3. 将找到的边的不属于U的顶点,放入U中,重复2,直至U中包含了所有顶点
  • 具体实现
    • 引入辅助数组edge[],长度等于顶点数
      • 结点结构 - 数据域vertex(与该顶点相连的另一顶点)|权值cost(这条边的权值)
      • 对于在U中的结点 i - edge[i].cost = 0
      • 对于在V-U中的结点 j -edge[j]代表与结点j相连的权值最小的边
    • 时间复杂度 O(n2) (与边的数量无关)
  • 适用于边稠密的图

Kruskal算法

  • 基本思路
    1. 在图中选择权值最小的边
    2. 如果这条边不会形成环路,则选择这条边;否则,查找下一权值的边
  • 时间复杂度(与顶点数量无关)
    • O(n2) - 已经按照边的权值排序
    • O(elog2e) - 未按照边的权值排序
  • 适用于边系数的图
posted @ 2018-09-30 17:10  break大蜗牛  阅读(431)  评论(0编辑  收藏  举报