【发布时间】:2017-12-05 14:56:11
【问题描述】:
我有一个优先级队列最大堆,其中每个元素都是一个名为 Task 的类,如下所示(用 Java 实现,但问题与语言无关):
class Task{
int ID
int Priority
int Time
public Task(int i, int p, int t){
this.ID = i;
this.Priority = p;
this.Time = t;
}
//Getters, etc
}
堆显然是按优先级排序的。我要执行的操作是找到最高优先级的项目,递减它的时间值,如果时间分数变为 0,则将其从堆中删除。但是,这里有一个问题:允许有多个任务与相同的优先级。在这种情况下,我会比较所有此类任务的 ID 分数,然后对最低的一个进行操作。
这种操作的最坏情况下的运行时间是多少?如果每个元素具有相同的优先级,我最终会搜索整个树,这意味着这不可能在少于 O(n) 的时间内完成,对吗?这似乎无法解决,因为 ID 未排序。但是,有人告诉我,这可以在 O(log n) 中完成,我完全不明白。谁能澄清我在哪里接近这个错误?
【问题讨论】:
-
您选择的标签没有很多关注者,我建议您使用语言标签,即使问题与语言无关
标签: java heap binary-tree scheduling priority-queue