算法之「普里姆(Prim)算法」

栏目: 编程工具 · 发布时间: 6年前

内容简介:普里姆算法(Prim's algorithm)是图中的一种算法,可在加权连通图中搜索最小生成树。该算法的作用就是根据图中权值找到连接所有顶点的最短路径,也就是连接所有顶点的最小权值之和,也是这个加权图中的最小生成树。1.选取权值最小边的其中一个顶点作为起始点。

普里姆算法(Prim's algorithm)是图中的一种算法,可在加权连通图中搜索最小生成树。

该算法的作用就是根据图中权值找到连接所有顶点的最短路径,也就是连接所有顶点的最小权值之和,也是这个加权图中的最小生成树。

普里姆算法步骤

1.选取权值最小边的其中一个顶点作为起始点。

2.找到离当前顶点权值最小的边,并记录该顶点为已选择。

3.重复第二步,直到找到所有顶点,就找到了图的最小生成树。

普里姆算法时间复杂度

假如我们有 V 表示图中的顶点个数,E 表示图中的边个数。

通过邻接矩阵图表示的简易实现中,找到所有最小权边共需 的运行时间。

使用简单的二叉堆和邻接表来表示的话,普里姆算法的运行时间则可缩减为 。

如果使用较为复杂的斐波那契堆,则可将运行时间进一步缩短为 ,这在连通图足够密集时,可较显著地提高运行速度。

普里姆算法示例

算法之「普里姆(Prim)算法」

根据上面加权连通图找到最小生成树。

算法之「普里姆(Prim)算法」

首先选择顶点 A 作为起点。顶点 D、F、B 与 A 相连,且 AD 之间的权值最小,因此选择这条边。此时 A、D 为已选择顶点,E、F、B 为待选择顶点,H、G 为未选择顶点。

算法之「普里姆(Prim)算法」

下一个顶点应选择离 A、D 权值最小的顶点,因此选择 AB 这条边。此时 A、D、B 为已选择顶点,E、F、G 为待选择顶点,H 为未选择顶点。

算法之「普里姆(Prim)算法」

下一个顶点应选择离 A、D、B 权值最小的顶点,因此选择 DE 这条边。此时 A、D、B、E 为已选择顶点,F、G、H 为待选择顶点,没有未选择顶点。

算法之「普里姆(Prim)算法」

下一个顶点应选择离 A、D、B、E 权值最小的顶点,因此选择 EH 这条边。此时 A、D、B、E、H 为已选择顶点,F、G 为待选择顶点,没有未选择顶点。

算法之「普里姆(Prim)算法」

下一个顶点应选择离 A、D、B、E、H 权值最小的顶点,因此选择 FH 这条边。此时 A、D、B、E、H、F 为已选择顶点,G 为待选择顶点,没有未选择顶点。

算法之「普里姆(Prim)算法」

最后,只剩下一个顶点 G,到顶点 G 的权值最小的是 HG。现在图中所有顶点都连接了,红色连接的边就是最小生成树,最小生成树的权值之和为 42。

总结

普里姆算法就是通过一个顶点扩散开找权值最小的边,所经过的顶点和边就是这个图的最小生成树。通过不用的数据结构存储图会导致时间复杂度不一致,用邻接矩阵的时间复杂度是 ,二叉堆和邻接表的时间复杂度是 。

PS:

清山绿水始于尘,博学多识贵于勤。

我有酒,你有故事吗?

微信公众号:「 清尘闲聊 」。

欢迎一起谈天说地,聊代码。

算法之「普里姆(Prim)算法」

以上所述就是小编给大家介绍的《算法之「普里姆(Prim)算法」》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编程之美

编程之美

《编程之美》小组 编 / 电子工业出版社 / 2008-3 / 40.00元

这本书收集了约60道算法和程序设计题目,这些题目大部分在近年的笔试、面试中出现过,或者是被微软员工热烈讨论过。作者试图从书中各种有趣的问题出发,引导读者发现问题,分析问题,解决问题,寻找更优的解法。本书的内容分为下面几个部分: (1)游戏之乐:从游戏和其他有趣问题出发,化繁为简,分析总结。 (2)数字之魅:编程的过程实际上就是和数字及字符打交道的过程。这一部分收集了一些好玩的对数字进行......一起来看看 《编程之美》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具