我正在寻找一个适当高效的存储结构,用于处理以随机顺序到达但必须按指定顺序处理和/或从堆栈中移除的数据。先进先出存储结构中的随机
为了使这更清楚:
每个项x具有索引i,时间戳T和被处理如下(假设已填充的存储结构)。
repeat
1) Process (remove) the item with the smallest time stamp.
2) Add new items (0 or more).
3) Remove (0 or more) items (referenced by their index).
until false
保证每个项目都有唯一的时间戳和索引。但是,直到步骤1)完成,或者在步骤3)中将移除多少项目,直到在算法的每个循环内完成步骤1)和2)之前,预测步骤2)中将添加多少项目是不可能的。传入项目的时间戳分布不能被预测(除了新的时间戳将在'未来'中),并且可能随着时间而变化 - 也就是说可能会有一堆随机分布的时间戳,后面跟着一堆时间戳都会更大(或小于)列表中剩余的任何项目。任何时候都会有最大数量的等待处理的元素,但这可能会相当大〜10^6-10^8,并且我需要尽可能快地处理它们 - 注意实际处理时间是对于大量数据我相当小,我预计'调度'将主宰我可以处理数据的速度。
如果我在步骤2)中将每个项目添加到链接的排序列表中,则步骤1)为O(0),但步骤2)为O(n)。如果我使用二叉树,那么步骤1)仍然是O(1),现在步骤2)最初是O(log n),但是如果时间戳没有很好地分布,树会很快失去平衡,这会减慢步骤2)显着下降(如果我不经常重新平衡树,最终不会比O(n)好)。
我的猜测是,如果重新平衡是在正确的间隔完成的,那么沿着二叉树的定期重新平衡的方向应该提供O(log n),但我认为这种问题很好已经解决了,所以有人可以指导我做适当的参考,或者给我一点建议,以帮助我避免重新发明车轮。
因此,我停止阅读所有关于“明确说明”的内容,但为什么不是[Priority Queue](http://en.wikipedia.org/wiki/Priority_queue)? (查看实现。) – 2012-08-02 03:13:30
你想要的是一个时间调度队列,它是一种优先队列形式。 – RBarryYoung 2012-08-02 03:19:42