Data structures 斐波那契堆或布罗达尔队列在实践中是否在任何地方使用?

Data structures 斐波那契堆或布罗达尔队列在实践中是否在任何地方使用?,data-structures,fibonacci-heap,Data Structures,Fibonacci Heap,斐波那契堆在实践中是否在任何地方使用?我环顾四周,找到了相关问题的答案(见下文),但实际上没有什么能完全回答这个问题 这些库包含斐波那契堆的事实表明,它们在某些地方一定很有用 我们知道,要使斐波那契堆在实践中更快,需要满足某些条件:“;“” 这是一个很好的表,比较了不同堆类型的各种操作的时间复杂性 在上,回答者只给出了二项式堆的例子 据我所知,没有真正使用斐波那契堆或布罗达尔队列的主要应用程序 Fibonacci堆最初的设计是为了满足理论而非实际需要:渐进地加速Dijkstra的最短路径算法。B

斐波那契堆在实践中是否在任何地方使用?我环顾四周,找到了相关问题的答案(见下文),但实际上没有什么能完全回答这个问题

  • 这些库包含斐波那契堆的事实表明,它们在某些地方一定很有用
  • 我们知道,要使斐波那契堆在实践中更快,需要满足某些条件:“;“”
  • 这是一个很好的表,比较了不同堆类型的各种操作的时间复杂性
  • 在上,回答者只给出了二项式堆的例子

  • 据我所知,没有真正使用斐波那契堆或布罗达尔队列的主要应用程序

    Fibonacci堆最初的设计是为了满足理论而非实际需要:渐进地加速Dijkstra的最短路径算法。Brodal队列(以及相关的函数数据结构)的设计类似于满足理论保证,特别是回答了一个长期存在的开放性问题,即是否有可能将Fibonacci堆的时间界限与最坏情况保证相匹配,而不是与摊销保证相匹配。从这个意义上说,开发数据结构不是为了满足实际需要,而是为了推进我们对算法效率极限的理论理解。据我所知,目前还没有一种算法能够更好地在Fibonacci堆上使用Brodal队列

    正如其他答案所指出的,Fibonacci堆或Brodal队列中隐藏的常数因子非常高。它们需要许多连接在许多复杂链表中的指针,因此,引用的局部性非常糟糕,特别是与标准二进制堆相比。这意味着,在给定缓存效果的情况下,它们在实际中的性能可能会更差,除非您有需要大量减少密钥操作的算法。有些情况下会出现这种情况(例如,链接的答案讨论了其中的一些),但将它们视为高度专业化的情况,而不是常见的用例。如果您正在处理大型图,则更常见的做法是使用其他技术来提高效率,例如对手头的问题使用近似算法、更好的启发式算法或使用基础数据特定属性的算法


    希望这有帮助

    关于近似算法的重要观点。当一个问题变得足够大,原则上可能会从这些奇特的数据结构中受益时,您可能会愿意接受近似值,到那时会快得多。