【发布时间】:2023-03-08 19:30:02
【问题描述】:
我最近使用两种数据结构对 Dijkstra 算法的运行时间进行了初步比较,基于 Java 的 PriorityQueue(如果我没记错的话,基于二进制堆)和 Fibonacci 堆。我使用 Java 的 currentTimeMillis() 进行计算。我最终得到的结果非常有趣。这是我的一个测试用例的输出:
Running Dijkstra's with 8 nodes and 27 links
- Execution time with binary heap: 1 miliseconds
- Execution time with Fibonacci heap: 4 miliseconds
诚然,我目前缺乏数据集,上面的图表是我最大的(我计划尽快制作更多)。但这有意义吗?我一直认为斐波那契堆比其他数据结构更快,因为与其他数据结构相比,它们的摊销运行时间。我不确定这 3 毫秒的差异是从哪里来的。 (我在 Intel Core Ivy Bridge i7-3630M 处理器上运行它,如果有帮助的话。)
注意:我偶然发现了this thread,这可能解释了这个问题,但我仍然不清楚为什么斐波那契堆版本需要更长的时间。根据该线程,这可能是因为我的图不够密集,因此减少键操作的数量不足以使斐波那契堆的性能真正发挥作用。这是唯一合理的结论,还是我还遗漏了什么?
【问题讨论】:
-
您需要一个比 8 个节点和 27 个链接大几个数量级的数据集才能获得有意义的基准。
-
是的,我现在明白了。我将不得不调查它,看看我能做些什么。谢谢。
标签: java data-structures heap dijkstra fibonacci-heap