从priorityqueue javadoc:
实现说明:此实现为排队和出列方法提供了o(log(n))时间 offer
, poll
, remove()
以及 add
; 线性时间 remove(Object)
以及 contains(Object)
方法;检索方法的时间常数 peek
, element
,和 size
.
所以,我的问题是,o(log(n))的时间复杂度是否适合合并 PriorityQueue
把她变成一个?或者是o(nlog(n))考虑插入?如果合并更多堆,这种情况会改变吗?
这些 PriorityQueue
s代表堆。
像这样:
PriortityQueue<Integer> a = new PriorityQueue<>();
... add elements
PriortityQueue<Integer> b = new PriorityQueue<>();
... add elements
PriorityQueue<Integer> merged = new PriorityQueue<>(a.size() + b.size(), a.comparator()); // Assuming a and b have the same Comparator.
merged.addAll(a);
merged.addAll(b);
1条答案
按热度按时间ryoqjall1#
正如你所指出的方法
add
来自班级PriorityQueue
有O(log(N))
时间复杂性。如果你看看这个方法的具体实现addAll
来自班级PriorityQueue
,您将看到以下内容:因此,对于作为参数传递的集合中的每个元素
add
被称为。因此,最终的复杂性将是O(Mlog(N))
,在哪里M
作为参数和参数传递的集合的元素数N
优先级队列的元素数。