[1,2,3,4,5,6,7,8,9,10] という配列が与えられた場合、次のことを行うアルゴリズムがあるとします。
for i in 0..a.length
for j in 0..a.length
...
これは、要素ごとに配列全体をトラバースするため、O(n^2) の Big O ランタイムになります。
しかし、内側のループが外側のインデックスから順方向にのみトラバースした場合はどうなるでしょうか?
for i in 0..a.length
for j in i..a.length
...
つまり、比較すると、最初のアルゴは反復ごとに n 個の要素を調べます (外側のループ)。2 番目のアルゴリズムは次のようになります。
- 最初の反復で n 個の要素
- 2 回目の繰り返しで n-1 要素
- 3 回目の繰り返しで n-2 要素
- ...
- 最後の反復で 1 要素
この種のアルゴリズムの Big O ランタイムを計算するとき、それはまだ O(n^2) ですか?