Are Fibonacci heaps or Brodal queues used in practice anywhere?
斐波那契堆在实践中是否在任何地方使用?我环顾四周,找到了相关问题的答案(见下文),但没有什么能真正回答这个问题。
据我所知,没有真正使用fibonacci堆或brodal队列的主要应用程序。
斐波那契堆最初的设计是为了满足理论而不是实际的需要:渐进地加速Dijkstra的最短路径算法。Brodal队列(以及相关的功能数据结构)的设计类似于满足理论保证,特别是回答一个长期存在的开放性问题,即是否可以将Fibonacci堆的时间界限与最坏情况的保证相匹配,而不是采用摊余保证。从这个意义上说,数据结构的开发并不是为了满足实际需要,而是为了推动我们对算法效率极限的理论理解。据我所知,目前还没有一种算法可以更好地在斐波那契堆上使用brodal队列。
正如其他答案所指出的,隐藏在斐波那契堆或布罗达尔队列中的常量因子非常高。它们需要在许多复杂的链表中连接许多指针,因此具有绝对糟糕的引用位置,特别是与标准二进制堆相比。这意味着,考虑到缓存效果,它们在实践中的性能可能更差,除非您有需要大量减少密钥操作的算法。有些情况下会出现这种情况(例如,链接的答案会讨论其中的一些),但将它们视为高度专门化的环境,而不是普通的用例。如果您正在处理大型图,则更常见的是使用其他技术来提高效率,例如对手头的问题使用近似算法、更好的启发式方法或使用基础数据的特定属性的算法。
希望这有帮助!