algorithm - 如何用斐波那契堆实现 Prim 算法?

标签 algorithm data-structures graph-algorithm prims-algorithm fibonacci-heap

我知道Prim's algorithm我知道它的实现,但我总是跳过我现在想问的部分。据记载,Prim 的算法实现为 Fibonacci heapO(E + V log(V)) 并且我的问题是:

  • 什么是斐波那契堆?
  • 它是如何实现的?和
  • 如何使用 Fibonacci 堆实现 Prim 算法?

最佳答案

Fibonacci 堆是一个相当复杂的优先级队列,在其所有操作上都具有出色的平摊渐近行为 - 插入、查找最小值和减少键都在 O(1) 分摊时间内运行,而删除和提取最小值运行在摊销的 O(lg n) 时间内。如果您想获得有关该主题的良好引用,我强烈建议您拿起 CLRS 的“算法导论,第 2 版”副本并阅读其中的章节。它写得非常好并且非常具有说明性。 The original paper on Fibonacci heaps by Fredman and Tarjan可在线获取,您可能想查看一下。它致密,但可以很好地处理 Material 。

如果你想看斐波那契堆和 Prim 算法的实现,我必须为我自己的实现提供一个无耻的插件:

  1. My implementation of a Fibonacci heap.
  2. My implementation of Prim's algorithm using a Fibonacci heap.

这两个实现中的注释应该很好地描述它们是如何工作的;如果有什么我可以澄清的,请告诉我!

关于algorithm - 如何用斐波那契堆实现 Prim 算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4825518/

相关文章:

algorithm - 如何创建一种算法来找到包含边的最短循环?

java - 对可能包含数字的字符串进行排序

algorithm - 以特定方式对 3x3 矩阵进行排序的最少步骤数

database-design - 数据结构和系统设计问题

algorithm - 如何有效地存储 IP 地址和 CIDR 范围

c - 叶节点的度数是多少?

algorithm - 刮刮卡号和序列号生成器

组内不重复的SQL随机数

c++ - 使用开放式寻址将节点插入哈希表[优化逻辑]

algorithm - CART决策树算法中如何拆分连续属性?