什么是java priorityQueue poll()方法的大O.

时间:2013-10-31 23:06:45

标签: java big-o

我查了http://en.wikipedia.org/wiki/Priority_queue 它说Naive的实现是o(n)。

如果我使用二进制搜索,它将是log(n)。但我不确定它是否在Java中使用。 我如何在priorityQueue上使用二进制搜索?

感谢。

1 个答案:

答案 0 :(得分:28)

来自PriorityQueue Javadoc

  

实施说明:此实施提供 O(log(n))时间   排队和出队方法(offerpollremove()和   add); remove(Object)contains(Object)的线性时间   方法;和检索方法的恒定时间(peek,   elementsize)。

优先级队列通常使用heap实现。如果实现为排序数组,则可以在O(1)中查找和删除头,因为它始终是最后一个元素*,但是插入新元素是O(n),因为需要找到插入点(可能是在O(log(n))中使用二进制搜索完成,然后所有后面的元素都需要移动以腾出空间,即O(n)。

*假设head是最小的元素,并且数组按降序排序。