允许事件取消的优先级队列

时间:2013-11-17 05:28:16

标签: data-structures priority-queue

我正在开发一个以优先级队列为中心的实时应用程序,它有一个转折:我需要支持队列中任何事件的“取消”。

显然,优先级队列的传统实现(堆)不适合这个应用程序,因为找到任意项目进行删除是O(n)。

但是,如果您有一个指向项目的指针,则删除仅为O(log n)。我想我可以通过维护一个哈希表来实现这一点,该哈希表的节点也作为堆链接在一起。这应该允许O(log n)插入,删除和pop-max。

然后,这又如何比二叉搜索树更好?那里的所有操作也都是O(log n),那么为什么要保持繁琐的双数据结构?

在我看来,跳过列表总体上会更好; pop-max为O(1),其他操作将分摊为O(log n)。

由于某种原因,我不断回到beap的想法,它对所有操作都有O(sqrt n)性能。

我认为这些解决方案中的任何一个都可行,但我的问题是......哪个在实时系统中最有效,该系统力求以最小的延迟服务请求?渐近分析很有用,但是大O符号并不能告诉您单个操作的成本。我的数据集不是很大 - 几千个条目顶部 - 所以虽然二元搜索树在纸上看起来比一个beap更好,但在我的情况下,beap可能会非常好,因为它不会浪费时间进行重新平衡操作

无论如何,我希望有人在这里有类似的经历。具有取消支持的优先级队列似乎没有被很好地描述,但在我看来,它似乎并不像以前没有其他人实现过的问题那么远。

0 个答案:

没有答案