【发布时间】:2012-12-28 09:01:06
【问题描述】:
我正在寻找一种数据结构来支持一种高级优先级队列。思路如下。我需要按顺序处理许多项目,并且在任何给定的时间点我都知道接下来要做的“最佳”项目(基于某些指标)。问题是,处理一个项目会改变一些 other 项目的指标,因此静态队列无法解决问题。
在我的问题中,我知道哪些项目需要更新其优先级,所以我正在寻找的数据结构应该有方法
- 入队(项目,优先级)
- 出队()
- requeue(item, new_priority)
理想情况下,我想在 O(log n) 时间内重新排队。有什么想法吗?
【问题讨论】:
-
优先级的变化可以双向(上下)还是单向?
-
@Thilo 他们可以双向改变。
-
堆是一个不错的选择。
-
您不能选择更好的指标吗?你怎么知道哪些项目需要重新排队?我的意思是你如何跟踪他们。
-
@hwlau : 项目在一个图中连接,当我处理一个项目时,我有效地在图中进行了局部更改,这改变了项目邻居的度量。
标签: data-structures priority-queue