簡體   English   中英

while循環內排序的時間復雜度

[英]time complexity of sorting inside while loop

我正在嘗試使用以下偽代碼了解算法的時間復雜度:

讓 nums 有 ArrayList 的數字

sort(nums)
while(nums.size() > 1) {
   // remove two elements
   nums.remove(0);
   nums.remove(0);

   nums.add(some_number);
   sort(nums);
}

sort(nums)(N)Log(N) nums.remove(0)O(N) nums.add()O(1)

現在這個算法的時間復雜度是多少。

最終的復雜度是O(n² log n)因為你做了n次操作O(n log n)

請記住,估計復雜度( O(...) )與確定操作總數不同(通常時間 function T(...)由總操作給出),它們是兩個不同的概念。 一個很好的介紹可能是算法分析

因此, O(...)表示法是一個上限,但T(...)是實際步驟。

您可以嘗試精確計算T function,或者您可以通過改進O降低上限 go ,但它們始終是不同的函數,因為O適用於所有可能條目的最壞情況。

在您的代碼中,對於排序 function,我們未知T ,只有它們的上限為O(n log n) ,然后:

T(n) ≤ O(n log n) + T(3) + O((n - 1) log (n - 1)) + T(3) + O((n - 2) log (n - 2) + ...
T(n) ≤ O(n log n) + n T(3) + n O(n log n)
                               ^^^^^^^^^

在這里,我們無法准確定義T用於對n-1n-2 ,...進行排序操作,這就是為所有這些操作建立更高級別O(n log n)的原因。 然后:

T(n) ≤ O(n log n) + n T(3) + n O(n log n)
T(n) ≤ O(n log n) + O(n) + O(n² log n)
T(n) ≤ O(n² log n)

在第二個表達式中,我們有固定數量的上界,在這種情況下,上界將是上界的最高值。

(刪除、刪除和添加是T(3) ,忽略goto和比較)

暫無
暫無

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

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