2017-02-22 6 views
1

私は学校で時間の複雑さをする方法を学び、教授はいくつかの例をアップロードしました。下の最初の例では、答えはO(n^3)であると考えられていますが、わかりません。Big O - これらのアルゴリズムの時間の複雑さを理解していませんか?

public static int fragment1 (int n) 
{ 
    int sum = 0; 
    for (int i = 1; i <= n*n; i++) 
     for (int j = 0; j*j < i; j++) sum++; 
    return sum; 
} // end fragment1 

私はループのために最初のを見て、それがn^2回実行していることがわかり、問題は、その後、forループの内側でもあるN^2試みます。私がO(n^4)を得たときに追加されます。

public static int fragment5 (int n) 
{ 
    int sum = 0; 
    for(int i=0; i < n*n*n; i++) 
    { 
     if(i%(n*n) == 0) { 
      for(int j=i*i; j > 0; j--) 
       sum++; 
     } // if 
     else 
     { 
      for(int k=0; k < i: k++) 
       sum++; 
     } // else 
    } // outer loop 
} 

上記の問題については、答えはO(n^7)である必要があります。私はそれを試みたとき、私は得た:最初のループ実行n^3回、内部ループn^3 * n^3 = n^6と、^10)。誰かが私に上記の問題に関するヒントを与えることができますか?私はそれがこの1つになると無知に感じ、私はこれまでのところ他の問題を抱えてきました。

+1

は、nは、jは何とか関連しますか?問題の追加情報はありますか?外側ループはn^2回実行されますが、内側ループはj^2回実行されます。 n == j以外の場合、n^4に結合するとは言えません。 – Ali

+4

これらは深刻なアルゴリズムではありません。これらは複雑さについて教えてくれるちょっとしたことですが、あなた自身で学ぶ必要があります。あなたを助けることができる助手がいると確信しています。例1の場合は、 "inner forループもn^2"と言ってください - 間違っています。ループが実際に言うことをよく見てください。 'j

+0

Q1についてのより大きいヒント:x = 1からn^2への統合x ^(1/2)を試す Q2の場合:最悪の場合は 'if'ブロックにあり、 'if'条件が真となる回数を考えることで' j'ループが起こる – shole

答えて

1

BigOを計算する際の基本的な仮定の1つは、です。非支配的な用語は、です。インナーループオーダーはO(n^3)

  • を有する第一の例を使用し

    は、

    • 外側ループは順序Oは(N^2)
    • 内部ループは、独立のために実行されています'n' の倍それがネストされているので、それがために実行されます 'のn *(nは^ 2) '

したがって、BigOはO(n^2)+(n^3)の形式であり、O(n^3)で十分です。

2番目の問題と同じ方法を試すことができます。
あなたはまだいくつかの混乱を持っている場合は、以下のビデオを見てい:最初の例 Big O Notation

+0

非常に参考になりました、私はそれを感謝します – ognimoddd

関連する問題