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

Posted break-dawnn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Data Structure & Algrithom] 无向图的最小生成树相关的知识,希望对你有一定的参考价值。

最小生成树(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) - 未按照边的权值排序
  • 适用于边系数的图

以上是关于[Data Structure & Algrithom] 无向图的最小生成树的主要内容,如果未能解决你的问题,请参考以下文章

[Data Structure & Algrithom] 二叉树

[Data Structure & Algorithm] 归并排序

[Data Structure & Algorithm] 线性表的查找

[Data Structure & Algorithm] 二叉排序树

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

Data structure basics - Java Implementation