値は、アルゴリズムの検査から得られますT
。たとえば、単純なループがある場合:
for (i=0; i < n; ++i) {
sum += i;
}
次に、操作を実行しますi<n
、++i
およびsum+=i
n 回、およびi=0
1 回。したがってf(n)==n
、c==4
(4 つの操作の場合、値の正確さのために「1 回」を「n 回」に上げます)、x==1
( については、まだとn==0
を実行するため、式は機能しません)。これにより、O(n) パフォーマンスが得られます (入力数に比例します)。i=0
i<n
ネストされたループの場合:
for (i=0; i < n; ++i) {
for (j=0; j<n; ++j) {
sum += j;
}
}
計算は と同様で、f(n)==n^2
O(n^2) が得られます。
c
そのため、との正確な値を伝える簡単な方法はありませんx
が、ほとんどの場合、難しい部分が思いつきますf
-- そして、その「最小」も (O(n^2) アルゴリズムはまた、提供した定義によると O(n^3) アルゴリズムですが、そのアルゴリズムを O(n^3) ではなく O(n^2) で特徴付けたいと考えています)。sの順序付けは、が無限大に近づくf
ときの成長に基づいています。小さなs の場合、前者が後者よりも大きい場合でも、は より遅く成長します。n
f(n)=n^3
f(n)=2^n
n
理論上、 と の実際の値は無限大に近づくにつれて無関係になるx
ことに注意してください。そのため、表記自体には表示されません。ただし、これは (比較的) 小さい値 ifの場合、命令の数がそれほど多くないことを意味するわけではありません(たとえば、for ループ内に 1000 の命令があります)。c
n
O(n)
n
f(n)
また、O(n) 表記では最悪のパフォーマンスが得られます。これは、たとえば、実際の生活 (平均ケースのコスト) やデータ構造の全体的な使用 (償却コスト) で観察されるものよりもはるかに高くなる可能性があります。