簡體   English   中英

O(N)與O(NlogN)

[英]O(N) vs O(NlogN)

我在處理Big-O表示法時使用了這個示例

x=n
while(x>0)
{
    y=x
    while(y>0)
    {   
        y=y-1
    }
    x = x/2
}

您能否解釋一下為什么它似乎具有O(N)的復雜性?

這對我來說是新的,但我希望它是N LogN。

我想念什么?

謝謝,

編輯:這段代碼來自這里https://www.quora.com/How-can-we-check-for-the-complexity-log-n-and-n-log-n-for-an-algorithm ?encoded_access_token = 1b7e0a4d10f84d50b5fea810f5a89cea

好,讓我們看看內部循環的主體執行的頻率:

x =   n:      n
x = n /  2: n /  2
x = n /  4: n /  4
x = n /  8: n /  8
x = n / 16: n / 16
x = n / 32: n / 32
x = n / 64: n / 64
until x < 1

或放在一起:

n + n / 2 + n / 4 + n / 8 + n / 16 + n / 32 + n / 64 ...

顯而易見的是:

n + n - n / 64

現在我們需要一個上限,因此我們可以忽略最后一項。 對於大哦,常數也無關緊要。 所以:

O(n)

如果您發現內部循環運行了多少次,就會發現代碼的復雜性。 內部循環運行n + n / 2 + n / 4 + ... n / k(其中n / k> 0)次。 n / 2 + n / 4 + ... + n / k部分的最大值為n-1。 因此,代碼的運行時間不能超過2n-1次,使上限2n-1為O(n)

暫無
暫無

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

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