我查了http://en.wikipedia.org/wiki/Priority_queue 它说Naive的实现是o(n)。
如果我使用二进制搜索,它将是log(n)。但我不确定它是否在Java中使用。 我如何在priorityQueue上使用二进制搜索?
感谢。
答案 0 :(得分:28)
实施说明:此实施提供 O(log(n))时间 排队和出队方法(
offer
,poll
,remove()
和add
);remove(Object)
和contains(Object)
的线性时间 方法;和检索方法的恒定时间(peek
,element
和size
)。
优先级队列通常使用heap实现。如果实现为排序数组,则可以在O(1)中查找和删除头,因为它始终是最后一个元素*,但是插入新元素是O(n),因为需要找到插入点(可能是在O(log(n))中使用二进制搜索完成,然后所有后面的元素都需要移动以腾出空间,即O(n)。
*假设head是最小的元素,并且数组按降序排序。