簡體   English   中英

找出以下重現的復雜性:T(n)= T(n / 2)+ log(n)

[英]Find complexity of the following recurrence: T(n) = T(n/2) + log(n)

我如何估計兩個循環的運行時間,每個循環以對數時間運行,如下所示:

for(int i=n; i>=0; i /= 2)
{
    for( int j=i; j>=0; j /= 2)
    {
        count++;
    }
}


我的分析:

i = n  , 1  => j = lg n  | 1+lg (n) 
i = n/2, 1  => j = lg n/2 | 1+lg (n/2)
i = 1  , 1  => j = 0      | 1

在這種情況下如何總結對數項?

i = n.      | Inner loop runs log(n) iterations.       | O(log(n))
i = n/2.    | Inner loop runs log(n/2) iterations.     | O(log(n))
i = n/4.    | Inner loop runs log(n/4) iterations.     | O(log(n))
.           |                                          |
.           |                                          |
i = log(n). | Inner loop runs log(log(n)) iterations.  | O(log(log(n)))

我們注意到了什么? 我們每個n都添加O(log(n))
這種重現是T(n) = T(n/2) + log(n) + 1可以通過以下方式擴展:

T(n) = log(n) + log(n/2) + log(n/4) + ... + 1
     = log(n) + [log(n)-1] + [log(n)-2] + [log(n) - 3] + .... + 1
     = log(n)*log(n) - (2 + 3 + .... log(n))
     = log(n)*log(n) - ([(2+log(n))*log(n)]/2) 
     = log(n)*log(n) - ~0.5log(n)*log(n)
     = ~0.5log(n)*log(n)

T(n) = O(log(n)*log(n))

暫無
暫無

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

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