【发布时间】:2026-01-06 03:20:16
【问题描述】:
你们有没有人实现过Fibonacci-Heap?几年前我就这样做了,但它比使用基于数组的 BinHeaps 慢了几个数量级。
当时,我认为这是一个宝贵的教训,说明研究并不总是像它声称的那样好。然而,许多研究论文声称他们的算法的运行时间基于使用斐波那契堆。
您是否曾经设法产生有效的实施?或者您是否使用过大到斐波那契堆效率更高的数据集?如果是这样,一些细节将不胜感激。
【问题讨论】:
-
你没学过这些算法老哥们总是把他们的大常数隐藏在他们的大字后面哦?! :) 在实践中,大多数时候,“n”的东西似乎永远不会接近“n0”!
-
我知道了——现在。当我第一次拿到“算法简介”的副本时,我就实现了它。另外,我没有为会发明无用数据结构的人选择 Tarjan,因为他的 Splay-Trees 实际上很酷。
-
mdm:当然不是没用,但就像插入排序在小数据集中优于快速排序一样,二叉堆可能会因为更小的常量而更好地工作。
-
实际上,我需要堆的程序是在 VLSI 芯片中寻找 Steiner-Trees 进行路由,因此数据集并不小。但现在(除了排序等简单的东西)我总是使用更简单的算法,直到它在数据集上“中断”。
-
我对此的回答实际上是“是”。 (嗯,我在一篇论文上的合著者做到了。)我现在没有代码,所以在我真正回复之前我会得到更多信息。然而,查看我们的图表,我注意到 F 堆进行的比较少于 b 堆。您是否使用了比较便宜的东西?
标签: performance algorithm language-agnostic data-structures fibonacci-heap