簡體   English   中英

一段代碼的計算復雜性

[英]Computational complexity of a piece of code

我有一個程序,並試圖計算其復雜性。 我想確定我沒有弄錯

for(int i=4; i<=n; i=i*4)
{
    cout<<"counter for first loop: "<<++count1<<endl;
    for(int j=i;j>=0;j=j-4)
    {
        cout<<"counter for second loop: "<<++count2<<endl;
        for(int k=0;k<=n;k++)
        {
            cout<<"counter for third loop: "<<++count3<<endl;
        }
    }
}

這里,第三個循環的復雜度是O(n),然后與第二個循環一起,復雜度變為O(n.log 4 i),整個程序的復雜度為O(n。(log 4 i) 2 ) 。 我的回答是對的? 謝謝

最內層循環的復雜性是O(n)。 中間的復雜性是O(i / 4),其又是O(i)。 最外層循環的復雜性是O(log 4 n)。 對於代碼的總復雜性,O(nilog 4 n)等於O(n。(log 4 n) 2 )。

您可以正式進行如下操作:

在此輸入圖像描述

執行此片段:

sum = 0;
for( i = 4 ;  i <= n;  i = i * 4 ) {
    for( j = i ; j >= 0 ; j = j - 4 ) {
        for( k = 0 ; k <= n ; k ++ ) {
            sum ++;
        }
    }
}

我們獲得:

在此輸入圖像描述

在此輸入圖像描述

在此輸入圖像描述

在此輸入圖像描述

結果與上面的公式完全兼容。

此外,兩個內部循環的運行時間都是O(n)...這意味着,當一起執行時,我們得到O(n²)。

暫無
暫無

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

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