0

これら2つの時空間の複雑さに違いはありますか?

for (int i=0; i<= 100; i++) {
    System.out.println("hi");
}

for (int i=100; i>= 0; i--) {
    System.out.println("hi");
}

ループがより大きく複雑な場合はどうなるでしょうか。いつのようにi <= 1000000

4

6 に答える 6

3

いいえ、両者の間に空間または時間の複雑さに違いはありません。

なぜあると思ったのか聞いてみたいです。

PS もちろん、実際のコードが異なる場合、答えも異なる可能性があります。

于 2013-09-06T09:50:05.770 に答える
0

そのため、時間の複雑さ、つまりO(N)に違いはありません。

従うべきアプローチの決定は、設計によって異なります。たとえば、特定の数の最大の素因数を見つける必要がある場合は、おそらく 2 番目のアプローチを使用します。したがって、基本的には(意図したプロジェクトの)設計に固有です。

于 2013-09-06T09:50:38.017 に答える
0

これらの単純なループの場合は? いいえ。定数文字列、一部System.out.println()のオーバーヘッド、および反復プリミティブを使用しているだけです。

ただし、より複雑な入れ子になったループの場合、特にループが内側のループの長さを変更して入れ子になっている場合は、違いが生じる可能性があります。

于 2013-09-06T09:50:03.643 に答える
0

(インデックス変数に応じて)いくつかのロジックでループから抜け出さない限り、スペース/複雑さに違いはありません。

インデックスのすべての単一の値を反復する必要がある場合、逆の順序に進むことは、順方向に進むのとまったく同じです。

于 2013-09-06T09:52:34.947 に答える
0

この特定の例ではそうではありません。より大きな配列の場合、一部のシステムでは遅くなる可能性があります。

通常、システムはメモリに順次アクセスするように最適化されています。メモリ アクセス パターンが予測可能である限り、両方のループの効率は同じですが、古いマシンや異なるアーキテクチャでは状況が異なる場合があります。

スペースの複雑さはそうではありません(質問を読み逃しました)

于 2013-09-06T09:52:37.943 に答える
0

どちらも同じ時間空間の複雑さを持っているわけではありません。

于 2013-09-06T09:50:19.757 に答える