data-structures - Fibonacci 堆或 Brodal 队列是否在任何地方的实践中使用?

标签 data-structures fibonacci-heap

最佳答案

据我所知,没有真正使用斐波那契堆或 Brodal 队列的主要应用程序。

斐波那契堆最初的设计目的是满足理论而非实际需求:渐近地加速 Dijkstra 的最短路径算法。 Brodal 队列(和相关的函数数据结构)的设计类似,是为了满足理论保证,具体来说,是为了回答一个长期存在的悬而未决的问题,即是否有可能将斐波那契堆的时间界限与最坏情况保证而不是摊销保证相匹配.从这个意义上说,数据结构的开发不是为了满足实际需求,而是为了插入我们对算法效率极限的理论理解。据我所知,目前还没有算法可以更好地使用 Brodal 队列而不是 Fibonacci 堆。

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

希望这可以帮助!

关于data-structures - Fibonacci 堆或 Brodal 队列是否在任何地方的实践中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30782636/

相关文章:

algorithm - 哪种数据结构/算法可以找到动态 MST(或有根树)路径上的最小节点

data-structures - 是否有更好的数据结构可用于在 Redis 中索引这些数据?

algorithm - 如何显示具有 n 个节点的 Fibonacci 堆可以有高度 n?

algorithm - Min Fibonacci Heap - 如何实现增加键操作?

java - 如何在斐波那契堆中实现减少键以在 O(1) 摊销时间内运行?

kotlin - 在 map 中查找键与 kotlin 中的firstOrNull

c - 在未排序的数组上可以完成的最快搜索是什么?

c - 解释使用以下宏获得的输出

algorithm - 优先队列 - 跳过列表与斐波那契堆

algorithm - Prim 算法与 Fibonacci 堆 : why O(E + V*log(V))?