哪个优先级队列在实践中更快?

Which priority queue is faster in practice?

最常用的操作:FindMin。不太常见:Insert 和 ExtractMin。很少:删除节点。非常罕见:合并。

在列出的条件下,以下哪个优先级队列实际上更快?

根据我五年多前所做的工作,我的经验是,在一般情况下,3 堆优于二进制堆。跳过列表堆和配对堆的性能略优于 3 堆,但内存成本更高。以上三个都优于斐波那契堆。

Brodal 队列理论上是最有效的。但是,正如 Brodal 自己所说,它们 "quite complicated" 并且“[不] 在实践中适用”。 https://en.wikipedia.org/wiki/Brodal_queue

很多人都在谈论斐波那契堆效率,渐近分析说它应该优于其他类型的堆。经验数据往往不能证明这一点。如 https://en.wikipedia.org/wiki/Fibonacci_heap#Worst_case.

中所述,Fibonacci 堆有明显的缺点

如果您要实现堆,我建议您从二叉堆开始。或者一个 3-heap,这是一个简单的优化。如果我需要更多性能,我的下一步将是配对堆。它易于实施且非常有效。

除此之外,我没有任何建议。我在其他类型的堆上看到的性能数字并没有显示出明显的赢家。