簡體   English   中英

這個priorityQueue的時間復雜度是多少

[英]What is the time complexity of this priorityQueue

我有下面的代碼,我想知道當我使用 PriorityQueue 時這段代碼的時間復雜度是多少。

我有一個大小為 N 的 listOfNumbers

Queue<Integer> q = new PriorityQueue<>();
q.addAll(listOfNumbers);

while(q.size()>1) {
    q.add(q.poll()+q.poll()); // add sum of 2 least elements back to Queue
}

根據這篇文章: Java PriorityQueue(堆)插入n個元素的時間復雜度?

入隊和出隊方法(offer、poll、remove() 和 add)的 O(log n) 時間

現在如何計算我再次將元素添加回隊列的時間。

你的程序的運行時間是 log(n) + log(n-1) +... + log(1)。

這是 log(n.)(通過重復應用日志規則 log(a) + log(b) = log(ab))。

log(n!) is theta(n log n) 請參見Is log(n?) = Θ(n·log(n))?

所以你的程序在 Theta(n log n) 時間內運行。

q.add(q.poll()+q.poll()); 隊列中的元素數始終為 O(N)。 所以,入隊仍然在 O(log(N)) 中工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM