回答:
これらの表記は、漸近的な成長を示すことを目的としています。定数は大きくならないため、どの定数を選択するかはほぼ同じです。ただし、成長がないことを示すために1を選択する規則があります。
これは、問題の数学用語を簡略化したいという事実によるものだと思います。一定の因数がある場合は、それを除算するだけで、残りは1になります。これにより、比較が容易になります。
例:
O(34 * n ^ 2)= O(1 * n ^ 2)= O(n ^ 2)
そして
O(2567.2343 * n ^ 2/5)= O(n ^ 2)
どういう意味ですか これらの数学的用語はますます複雑になるので、興味のある情報に関係がない場合にノイズの多い定数を使用することは望ましくありません。 (1)事件の事実を明確に伝える。
さらに、時間の複雑さに関するウィキペディアの記事も、それが慣習であることを示唆しています。
アルゴリズムは一定時間と呼ばれます(O(1)時間とも呼ばれます)...
O(5 * n^2)
を落とす* 1
と自然に感じられなくなりますが、ドロップは基本的な計算です。
これはすべて非常に波状ですが、Theta(c)を使用せず、代わりにTheta(1)を使用する数学的な理由があります。代わりにBig O表記を使用してこれを示します。
これは、Big Theta(およびBig OおよびBig Omega)表記のプロパティと関係があります。あなたが成長率を持つ関数がある場合はO(g(x))
成長率や他のいくつかの定数であるが、あなたは彼らが同じ成長率を持っていると言うでしょう。あれはO(c * g(x))
c
O(c * g(x)) = O(g(x))
これは、Big O表記(f(x) = O(g(x))
)の定義が、ある定数で十分に大きな値をf(x)
持つg(x)
ような関数と関数を持っていることを意味する|f(x)| <= k * |g(x)|
ためk
ですx
。定数を掛けるとc
、次のようになります。
O(c * g(x)) => k * |c * g(x)| = k * |c| * |g(x)| <= k' * g(x)
どこ k' = k * |c|
なお、|k' * g(x)| <= k'' g(x)
いくつかの定数のためk''
のおよび十分に大きな値がx
どの手段、k' * g(x)
の速度で成長しO(g(x))
、したがってO(c * g(x)) = O(g(x))
ときg(x) = 1
、私たちがO(1)
成長しているとき、定数がBig O表記の定義にすでに組み込まれているので、O(c)
ある値の成長はc
何も教えてくれないと言っています。簡略化O(c) = O(1)
もちろん、Theta(c)(またはO(c))と書くこともできますが、なぜそれがTheta(n)と異なるのですか?nは、入力のサイズを示す単なる変数です。「関数はTheta(c)で、cは定数です」と書くことができます。重要な補遺は...ここでcは定数です。識別子は変数ではないことを明示的に述べる必要があります。
アルゴリズムの境界が| V |の関数として記述されることが多いグラフ理論を考えます。と| E |、またはノードとエッジの数。次に、「関数はシータ(| V | * | E | ^ 2)です」と述べるのが賢明です。
ただし、Theta(1)は常に定数です-通常の数学的慣行を想定しています。
Theta(1) however is always a constant
。これは私が取得しない部分です。Theta(c)も常に定数です。そうですか?1
特別な意味があるかどうか疑問に思いました
c
必ずしも定数でc
はありません。実際には定数として解釈される必要があることを明示的に指定しない場合は変数なので、これはによって回避されるわずかな違いです1
。
c
、定数ではありません。c
手紙です。他の文字は変数を表しますが、読者はこれが同様にそうでないことをどのように知ると思いますか?
シータ表記は、いくつかの変数の関数としての成長に関するものです-通常n。どの変数が意図されているかを明確にする必要がある場合、その変数の記述方法はTheta(n ^ 0)になります。そこから、アイデンティティn ^ 0 = 1(n!= 0の場合)を適用するのは簡単なステップです。
n^0
はなくn^1
、一定の時間を表すと言うのですか?