簡體   English   中英

這個循環的時間復雜度是 O(n*log(n)) 嗎?

[英]Is the time complexity of this loop O(n*log(n))?

如果有人向我解釋如何分析此循環的時間復雜度,我將不勝感激:

int t;
for (i = 1; i <= n; i++){
t = i;
    while(t > 0){
        t = t/2 
   }
}

我傾向於認為這是 O(n*log(n)) 因為它非常類似於:

int t;
for (i = 1; i <= n; i++){
    t = n;
    while(t > 0){
        t = t/2 
   }
}

但它對變量 t 的賦值較少。 是這種情況嗎? 如果是這樣,我如何才能更嚴格地得出這個結論?

對於第一個片段,內循環運行log(1) + log(2) + ... + log(n)次,這與log(1 * 2 * ... * n) = log(n!)通過 Sterling's Approximation 是n log(n) 您的第二個代碼段具有相同的復雜性。 即使它碰巧做的作業較少,我們也只關心整體行為。 在這種情況下,兩者都是線性的。

暫無
暫無

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

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