具有恒定时间后继操作的优先级队列

时间:2014-02-01 17:21:03

标签: c data-structures linked-list heap priority-queue

我正在寻找一个链接数据结构(因为我不知道我在运行时处理了多少项),它们既可以用作优先级队列,也可以用作链表。换句话说:搜索,插入和删除每个节点的时间不应超过对数时间,但每个节点也应该有一个 next - 指针,它应始终指向比自身大的最小元素(at每次插入和删除时,至少有一个必须在每次插入和删除时更新,当然)。

(我想要指针,所以我可以打印一个随机节点和一定数量的直接后继节点。)

对我而言,这是一个非常常见的问题,即使像我这样的新手程序员也不应该难以解决,但我不知道可以做到这一点的数据结构:

似乎我不能使用二进制堆,因为找到下一个元素并不简单,除非我通过删除线性时间中的每个项目而将整个堆转换为列表能够再次在日志时间插入或删除。

平衡搜索树中搜索每个后继密钥比转换堆更好,但每个后继的对数时间似乎仍然是安静的,这对于这样一个简单的任务来说是浪费周期。

提前感谢任何建议:)。

2 个答案:

答案 0 :(得分:2)

使用skip list可轻松完成此操作。插入和查找是O(log n)(摊销)。首先删除是O(1)。找到继任者是O(1)。

你也可以创建一个threaded search tree,在这种情况下找到后继者是O(1)。

答案 1 :(得分:1)

您可以使用平衡搜索树。要提供O(1)邻居访问,您可以在修改操作期间以对数时间维护直接邻居链路,无论如何都是O(log(n))。