Prim算法与Kruskal(没有代码)

Posted moyujiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prim算法与Kruskal(没有代码)相关的知识,希望对你有一定的参考价值。

两个最小生成树算法, 都有一个共同的思想: 这棵树是一点一点长大的; 并且每次生长, 都是贪心的.

不同之处是: Kruscal算法是以边为中心的, 每次找最小的并且有用的边添加到树上;

Prim算法是以点为中心的, 每次找离树最近的点添加到树上.

我们可以把一棵树理解成一个有智能的生命, 可以感知它附近的点到它的距离. 每次生长枝条, 它都选择离它最近的那个点.

点到树的距离, 是指树外一个点到树上的任意点的最小距离.

所以,在代码实现的时候, 需要维护这样一个数组: 树外的点到树的距离. 所以, 还需要区分一下点究竟在树上还在树外.

维护数组就是要做两件事: 更改数组和调用数组.

何时更改: 树外的点到树的距离发生变化. 这种事只能在树生长了新的枝条的时候发生, 因为新加入的那个点可能更新了树到树外的某个点的距离. 同时, 新加入的那个点变成了树上的点.

何时调用: 想扩张的时候, 找最近的树外点.

一开始, 我们认为1号结点在树上, 把它到树的距离设为0; 其它结点的距离是INF.

在调用完整个算法之后, 因为当一个节点变成树上节点后, 我们就不再更新它到树的距离, 所以, 原来的数组记录的就是它加入到树上时的连边长度. 对之求和, 就是树上所有边权之和.

Prim算法的优势: 稠密图, 尤其是完全图. 因为在Kurscal算法中, 必须事先求出所有边的长度才能对之排序. 但是一个有5000节点的完全图, 这样做的空间开销是巨大的. Prim算法只在更新点到树的距离时需要用到边长, 因此对于给坐标的完全图, 可以现用现算.

以上是关于Prim算法与Kruskal(没有代码)的主要内容,如果未能解决你的问题,请参考以下文章

(学习1)最小生成树-Prim算法与Kruskal算法

关于最小生成树的Prim算法和Kruskal算法

图解:如何实现最小生成树(Prim算法与Kruskal算法)

Prim普利姆与Kruskal克鲁斯卡尔算法(Java版)

最小生成树详解 prim+ kruskal代码模板

什么是Prim算法?