一文带你弄懂普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法

Prim算法

Prim算法用于构造最小生成树,且适用于稠密图。


基本思想 : 归并顶点

设连通网络 N = { V, E }

  1. 从某顶点 u0 出发,
    选择与它关联的具有最小权值的边(u0, v),
    将其顶点加入到生成树的顶点集合U中
  2. 每一步从U中挑选一个顶点u,而另一个顶点不在U中的各个顶点中选择权值最小的边(u, v),把它的顶点加入到U中
  3. 直到所有顶点都加入到生成树顶点集合U中为止

举例

一文带你弄懂普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法_第1张图片

Kruskal算法

Krusklal算法用于构造最小生成树,且适用于稀疏图。


基本思想 : 归并边

设连通网络 N = { V, E }

  1. 构造一个只有 n 个顶点,没有边的非连通图 T = { V, ∅ \varnothing }, 每个顶点自成一个连通分量
  2. 在 E 中选最小权值的边,若该边的两个顶点落在不同的连通分量上,则加入 T 中;否则舍去,重新选择
  3. 重复下去,直到所有顶点在同一连通分量上为止

举例

一文带你弄懂普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法_第2张图片

你可能感兴趣的:(数据结构与算法)