Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从集合构造PriorityQueue的时间复杂度是多少?_Java_Collections_Heap_Priority Queue_Binary Heap - Fatal编程技术网

Java 从集合构造PriorityQueue的时间复杂度是多少?

Java 从集合构造PriorityQueue的时间复杂度是多少?,java,collections,heap,priority-queue,binary-heap,Java,Collections,Heap,Priority Queue,Binary Heap,Java的PriorityQueue构造函数和集合的复杂性是什么? 我使用了构造函数: PriorityQueue(Collection<? extends E> c) PriorityQueue(Collection从集合(即使是未排序的集合)初始化PriorityQueue的时间复杂度为O(n)。在内部,它使用一个名为siftDown()的过程来“heapify”一个数组(在文献中也称为下推) 这是违反直觉的。似乎将元素插入堆是O(logn),因此插入n个元素会导致O(nlog

Java的PriorityQueue构造函数和
集合的复杂性是什么?
我使用了构造函数:

PriorityQueue(Collection<? extends E> c)

PriorityQueue(Collection从集合(即使是未排序的集合)初始化
PriorityQueue
的时间复杂度为O(n)。在内部,它使用一个名为
siftDown()
的过程来“heapify”一个数组(在文献中也称为下推)

这是违反直觉的。似乎将元素插入堆是O(logn),因此插入n个元素会导致O(nlogn)的复杂性。如果一次插入一个元素,则是如此。(在内部,插入单个元素时使用
siftUp()

对单个元素进行筛选肯定是O(logn),但是
siftDown()
的“诀窍”是,随着每个元素的处理,必须筛选过去的元素数量不断减少。因此,总的复杂性不是n个元素乘以logn;它是筛选剩余元素的成本下降的n项之和


请参阅,也请参阅通过数学运算得出的结果。

简短回答,创建或构造堆[heapify]的时间复杂度为:
O(N)