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に評価し、内側のループを終了するため、唯一の反復を実行します。j
i=0
i=0,1..n-1
j
ここでは混乱の私のソースは以下のとおりです。
外側のループは実行しませんので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)は、なぜそれがオフになります。