2017-10-06 98 views
0

所以我有這個代碼塊:時間複雜度驗證

int sum=0; 
for (int i=1; i<n; ++i){ 
    for (int j=1; j<i*i; ++j){ 
     if (j%i==0){ 
      for (int k=0; k<j; ++k){ 
       ++sum; 
      } 
     } 
    } 
} 

,我想通這有$ O(N^5)$的複雜性。我試着對此進行計時來驗證,但我無法確定是否最適合使用$ n^4 $或$ n^5 $。

+0

的https://stackoverflow.com/questions/46562623/time-complexity-of-this-algo –

回答

0

複雜度是n^4。 原因是,第三個將運行O(n^2)時間而不是O(n^3),因爲您可能已計算。 if case只會被稱爲(i*i)^(1/2) = O(n)次,因爲從1i*ii的倍數數字恰好是i = O(n)

所以我有這個代碼塊:

int sum=0; 
for (int i=1; i<n; ++i){ 
    for (int j=1; j<i*i; ++j){   // O(n) 
     if (j%i==0){ 
      for (int k=0; k<j; ++k){ // O(n^2) 
       ++sum;     // O(n^4) 
      } 
     } 
    } 
} 
+0

完全重複,我不同意這種說法回答 – RSon1234

+0

我無法遵循你的邏輯。爲什麼在這種情況下稱爲O(n)次? –

+0

我在解釋事情上很不好,讓我編輯我的答案。這個if被稱爲外部for的每一步的O(n)次。 –