Big O は、入力サイズの増加に応じてアルゴリズムがスケーリングする速さを示すために使用されます。
O(1) は、入力サイズが増加しても実行時間は変わらないことを意味します
O(n) は、入力サイズが 2 倍になると、実行時間が多かれ少なかれ 2 倍になることを意味します
O(n^2) は、入力サイズが 2 倍になると、実行時間が多かれ少なかれ 4 倍になることを意味します
O(f(n)) は、入力サイズが 2 倍になると、実行時間が約 f(2n) に増加することを意味します。
Big-O、ソート、再帰について。
Big-O ソートは実際にはアルゴリズムではありません。ただし、Big O を使用して、並べ替えアルゴリズムの速度を確認できます。
再帰関数の Big-O を計算するには、Master Theoremを使用することをお勧めします。
Big O を決定するためのガイドライン:
通常、入力サイズを決定する必要があります (配列の長さ、リンクされたリスト内のノードの数など)。
次に、入力サイズが 2 倍になるとどうなるかを自問してください。それともトリプル?各要素を通過する for ループがある場合:
//say array a has n elements
for (int i = 0; i < n; i++) {
// do stuff
a[i] = 3;
}
次に、n を 2 倍にすると、ループの実行時間が 2 倍になるため、O(n) になります。n を 3 倍にすると、所要時間が 3 倍になるため、コードは入力サイズに比例してスケーリングします。
2D 配列があり、for ループがネストされている場合:
// we say that each dimension of the array is upper bounded by n,
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
// do stuff
a[i][j] = 7;
}
}
n が 2 倍になると、コードには 2^2 = 4 倍の時間がかかります。入力サイズが 3 倍になると、コードには 3^2 = 9 倍の時間がかかります。したがって、Big O は O(n^2) です。