wの細部を誤解/ネストされたforループ時の複雑性分析... O(n)を伝え、O(n²)別にする方法

CosmicCat:

以下のアルゴリズムの場合:

 int x = 0;
 for (int i = 0; i < n; i++)
     for (j = 0; j < n; j++) {
         if (j < i) j = j + n;
         else x = x + 1;
      }

だから、このアルゴリズムのために、私の思考プロセスは次のようになります:

内部ループを行うnための反復しかし、のすべての値についてif文がtrueに評価し、内側のループを終了するため、唯一の反復を実行します。ji=0i=0,1..n-1j

ここでは混乱の私のソースは以下のとおりです。

外側のループは実行しませんのでn、内側のループを行うため、どのような関係なく反復をn反復処理i=0(非常に最初の反復)、来るどのようにビッグああ時間の複雑ではありませんO(n²) 代わりにある、(n)は、O場合ループは、ネストされたとの両方が実行されているn非常に最初の繰り返しで反復を?

憲兵:

あなたは言うライン持っているif (j < i) j = j + n;本質的ループ(の勃発これをj < i)、および0で内部ループが始まることから、これは一定の時間で実行すること、最初の反復(最初の時間を除く)たびにトリガされます。

あなたは基本的にここでしか一つのループを持っています。コードは次のように書き換えることができます。

int x = 0;
for (int i = 0; i < n; i++) {
    x = x + 1;
}

それはO(n)は、なぜそれがオフになります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=229208&siteId=1