[英]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-1
, n-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.