我正在研究不同种类的堆数据结构。
斐波那契堆似乎具有更好的最坏时间复杂度,可用于 (1) 插入、(2) 删除和 (3) 查找最小元素的操作。
我在 Java 中发现了一个名为 PriorityQueue
的类,它是平衡二叉堆。但为什么他们没有使用斐波那契堆呢?
此外,在 java.util
中是否有斐波那契堆的实现呢?
谢谢!
我正在研究不同种类的堆数据结构。
斐波那契堆似乎具有更好的最坏时间复杂度,可用于 (1) 插入、(2) 删除和 (3) 查找最小元素的操作。
我在 Java 中发现了一个名为 PriorityQueue
的类,它是平衡二叉堆。但为什么他们没有使用斐波那契堆呢?
此外,在 java.util
中是否有斐波那契堆的实现呢?
谢谢!
为什么他们没有使用斐波那契堆?
可能是因为这些堆每个条目的开销比二进制键高得多。
此外,Java.util中是否有斐波那契堆的实现?
没有,但是
为什么他们没有使用斐波那契堆?
我认为主要原因是因为斐波那契堆只有在您有更多 decreaseKey 操作与一个 extractMin 操作相关联的情况下才能帮助。例如,当您将其与 Dijkstra 算法一起使用时。
此外,在 Java.util 中没有实现 Fibonacci 堆,但我对这个话题进行了一些实验,使用了现有的开源版本的 Fibonacci 堆。您可以在我的博客或项目的 GitHub 存储库中找到它。