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

标签 algorithm heap priority-queue skip-lists fibonacci-heap

我有兴趣实现一个优先级队列来启用一个高效的 Astar 实现,它也相对简单(我的意思是优先级队列很简单)。

似乎因为跳跃列表提供了一个简单的 O(1) 提取-最小操作和一个 O(Log N) 的插入操作,它可能与更难实现的具有 O(log N) 的 Fibonacci 堆竞争) extract-Min 和一个 O(1) 插入。我认为 Skip-List 对于具有稀疏节点的图形会更好,而 Fibonacci 堆对于具有更密集连接节点的环境会更好。

这通常会使斐波那契堆更好,但我假设 Big-Oh 明智的它们是相似的是否正确?

最佳答案

Fibonacci 堆存在的理由是 O(1) 减键操作,使 Dijkstra 算法能够在 O(|V| log |V| + |E|) 时间内运行。然而,在实践中,如果我需要一个有效的减少键操作,我会使用配对堆,因为斐波那契堆有糟糕的常量。如果您的 key 是小整数,则使用 bin 可能会更好。

关于algorithm - 优先队列 - 跳过列表与斐波那契堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6847233/

相关文章:

c++ - 将算法 C++ 无效操作数替换为二进制表达式

algorithm - PHP中有双向哈希算法吗?

javascript - 如何以对数方式可视化一系列值?

c++ - 您如何更新priority_queue中的值,或者是否有另一种方法可以在c++中更新堆中的键

java - 二维平面中的 K 最近邻

algorithm - 在龟兔算法中,为什么我们让兔子向前迈出两步并检查它们

algorithm - 是否可以从两个堆构建最大堆而不重建堆?

c++ - 将元组的 vector 转换/构造为堆

c++ - 比较器功能如何在Priority Queue C++ STL中工作?

带有自定义比较器的 Java PriorityQueue