2017-10-06 6 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^3)ではなく、O(n^2)回を実行するためです。 ifの場合は、の倍数が1からi*iまで正確にi = O(n)であるため、outerのfor eachステップごとに(i*i)^(1/2) = 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

私はあなたのロジックに続く問題を抱えています。なぜif-caseはO(n)回呼ばれるのですか? –

+0

私は事を説明するのが非常に悪いです、私の答えを編集させてください。 ifは、外側の各ステップに対してO(n)回呼び出されます。 –