アルゴリズムの実行時の複雑さを理解できます。しかし、アルゴリズムの実行時の複雑さがO(n)であることを知ったとき、少し混乱します。
f(n)<g(n)であることがわかります。
g(n)とは正確には何ですか..?
ルーキーの質問でごめんなさい。
ありがとう。
アルゴリズムの実行時の複雑さを理解できます。しかし、アルゴリズムの実行時の複雑さがO(n)であることを知ったとき、少し混乱します。
f(n)<g(n)であることがわかります。
g(n)とは正確には何ですか..?
ルーキーの質問でごめんなさい。
ありがとう。
実数のサブセットで定義された2つの関数としますf(x)
。g(x)
1つの書き込み
f(x) = O(g(x)) as x -> infinity
M
正の実数と次のx0
ような実数が存在する場合にのみ
|f(x)| <= M |g(x)| for all x > x0
一般に、f(x)
は、の入力スケールでのアルゴリズムの実際のコスト(実行ステップ数など)ですがx
、の複雑さの動作を特徴付けるために使用できるg(x)
よりもはるかに単純です。f(x)
f(x)
f(x)とg(x)は単なる関数のペアであるというコメントに同意します。f(x)= O(g(x))は、それらが特定の方法で関連していることを示します。
これがよく使用される方法は、f(x)を複雑で、特徴付けが難しい機能にすることです。g(x)ははるかに単純な関数です。f(x)= O(g(x))を知ることで、xが増加するにつれてf(x)の限界を感じることができます。
コンピュータサイエンスへの応用は、f(x)を入力サイズxの関数としてのプログラムの振る舞いの尺度にすることです。たとえば、f(x)は、x要素配列をソートする際の比較の最大数、または一部のアルゴリズムで使用されるメモリのワード数である可能性があります。f(x)はしばしばかなり乱雑になります。
f(x)= O(g(x))を証明できるように、すてきでクリーンな関数g(x)を見つけることで、物事を簡単にすることができます。
たとえば、一部のアルゴリズムは、サイズ30未満の入力の場合、入力の35操作または要素あたり10操作の大きい方、またはすべての大きい入力の場合、要素あたり1000操作を実際に取る場合があります。
f(x)= O(x)であることに気付くと、アルゴリズムの比較がはるかに簡単になり、簡単になります。
これは、f(x)<g(x)と言うことと同じではないことに注意してください。私の例では、xが大きい場合、f(x)はg(x)の1000倍になります。これは、g(x)が、xが大きくなるにつれてf(x)がどのように動作するかをキャプチャすることを意味します。