これら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
いいえ、両者の間に空間または時間の複雑さに違いはありません。
なぜあると思ったのか聞いてみたいです。
PS もちろん、実際のコードが異なる場合、答えも異なる可能性があります。
そのため、時間の複雑さ、つまりO(N)に違いはありません。
従うべきアプローチの決定は、設計によって異なります。たとえば、特定の数の最大の素因数を見つける必要がある場合は、おそらく 2 番目のアプローチを使用します。したがって、基本的には(意図したプロジェクトの)設計に固有です。
これらの単純なループの場合は? いいえ。定数文字列、一部System.out.println()
のオーバーヘッド、および反復プリミティブを使用しているだけです。
ただし、より複雑な入れ子になったループの場合、特にループが内側のループの長さを変更して入れ子になっている場合は、違いが生じる可能性があります。
(インデックス変数に応じて)いくつかのロジックでループから抜け出さない限り、スペース/複雑さに違いはありません。
インデックスのすべての単一の値を反復する必要がある場合、逆の順序に進むことは、順方向に進むのとまったく同じです。
この特定の例ではそうではありません。より大きな配列の場合、一部のシステムでは遅くなる可能性があります。
通常、システムはメモリに順次アクセスするように最適化されています。メモリ アクセス パターンが予測可能である限り、両方のループの効率は同じですが、古いマシンや異なるアーキテクチャでは状況が異なる場合があります。
スペースの複雑さはそうではありません(質問を読み逃しました)
どちらも同じ時間空間の複雑さを持っているわけではありません。