web-dev-qa-db-ja.com

一定時間のシータ表記。なぜ1を使用するのですか?

問題のサイズが十分に小さい場合(たとえば、一部の定数cに対して_n<c_)であると示されている漸近表記では、解は一定の時間がかかり、Theta(1)として書き込まれます。
Theta内に_1_を記述する理由
_1_はどういう意味ですか?なぜTheta(c)ではないのですか?

9
user10326

これらの表記は、漸近的な成長を示すことを目的としています。定数は増加しないため、どの定数を選択するかはほぼ同じです。ただし、成長がないことを示すために1を選択する規則があります。

これは、問題の数学用語を簡略化したいという事実によるものだと思います。一定の因数がある場合、それを除算するだけで、残りは1になります。これにより、比較が容易になります。

例:

O(34 * n^2) = O(1 * n^2) = O(n^2)

そして

O(2567.2343 * n^2 / 5) = O(n^2)

どういう意味?これらの数学的用語はますます複雑になるので、興味のある情報に関連していない場合にノイズの多い定数を使用することは望ましくありません。なぜO(2342.4534675767) =ケースの事実を明確に伝えるO(1)で簡単に表現できる場合。

さらに、 時間の複雑さに関するウィキペディアの記事 も、これが慣例であることを示しています。

アルゴリズムは一定時間であると言われます(O(1)時間)とも表記されます)...

8
Falcon

これはすべて非常に波状ですが、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) where _k' = k * |c|_

いくつかの定数_k''_およびxの十分に大きい値に対して|k' * g(x)| <= k'' g(x)は、k' * g(x)O(g(x))の割合で増加することを意味することに注意してくださいしたがって、O(c * g(x)) = O(g(x))

g(x) = 1の場合、O(1)の増加があり、cのある値に対するO(c)の増加は、定数がすでに存在するため何も伝えませんBig O表記の定義に組み込まれました。簡略化O(c) = O(1)

13
Jay Lindquist

もちろん、Theta(c)(またはO(c))と書くこともできますが、それがTheta(n)と異なるのはなぜですか?nは入力のサイズを示す単なる変数です。 "関数はTheta(c)where c is a constant"と書くことができます。重要な補遺は... where cは定数です。識別子はaではないことを明示する必要があります変数。

アルゴリズムの境界が| V |の関数として記述されることが多いグラフ理論を考えます。と| E |、またはそれぞれノードとエッジの数。次に、「関数はシータ(| V | * | E | ^ 2)」と述べるのが賢明かもしれません。

ただし、Theta(1)は常に定数です-通常の数学的慣行を想定しています。

3
Max

シータ表記は、いくつかの変数の関数としての成長に関するものです-通常n。どの変数が意図されているかを明確にする必要がある場合、その変数の記述方法はTheta(n ^ 0)になります。そこから、アイデンティティn ^ 0 = 1(n!= 0の場合)を適用するのは簡単なステップです。

0
Peter Taylor

O(c)は、関連するアルゴリズムのクラスがcここでcはアルゴリズムへの入力またはアルゴリズムへのパラメーターのサイズです。 O =表記の説明に使用されているcとは異なります。なぜなら、cは使用法ではなく、説明にのみ関連しています。 O(c)には、アルゴリズムから取得する必要がある別のcが含まれています入力コンテキスト。

0
jprete