簡體   English   中英

找出大O時間的復雜性

[英]Finding the Big O time complexity

i = 1;     
while (i <= n) {
     j = n - i;
     while (j >= 2) {
         for (k = 1; k <= j; k++) {
             s = s + Arr[k];
         }
         j = j - 2;
     }
     i = i + 1;
}

讓我困惑的部分是它所說的地方

j = n - i;
while(j >= 2){

我不太確定該如何展示我的作品。 我很確定算法雖然是O(n ^ 3)。

您可以稍微簡化一下,以便更清楚地看到內容:

for(i = 1; i <= n; i++)
{
    for(j = n - i; j >= 2; j -= 2)
    {
        for(k = 1; k <= j; k++)
        {
            s = s + Arr[k];
        }
    }
}

現在事情應該更簡單

  • for(i = 1; i <= n; i++)O(n) [實際上執行了n次]
  • for(j = n - i; j >= 2; j -= 2) :( (n-1)/2在第一次迭代中, (n-3)/2在第二次迭代中,依此類推... O(n)
  • for(k = 1; k <= j; k++)在第1次迭代中為n-2在第n-2次迭代中為n-3 ,依此類推... O(n)
  • s = s + Arr[k]; [簡單操作]: O(1)

乘以每一步,您將得到O(n ^ 3)

如果您仍然遇到問題,建議您使用循環內的n值和一個計數器運行此代碼的一些模擬。 希望您能夠看到O(n)是每個循環的復雜度

暫無
暫無

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

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