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


9

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

回答:


8

これらの表記は、漸近的な成長を示すことを目的としています。定数は大きくならないため、どの定数を選択するかはほぼ同じです。ただし、成長がないことを示すために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)時間とも呼ばれます)...


でも、Theta(c)だけで定数をカバーしないのはなぜですか?
user10326

8
@ user10326:「c」が誤って解釈される可能性があるためだと思います。「1」が同じ仕事を明確に行う一方で、「c」は定数であると明確に述べなければなりません。
ファルコン

実際の数は関係ありませんか?慣例として、5ではなく1を使用しますか?
user10326

1
@ user10326:はい、違いはありません。ただし、混乱を招く可能性があるため、「0」の使用は控えます。
ファルコン

@ user10326:Falcon彼の答えは完全に理解できましたか?1ではなく5になると、5 O(5 * n^2)を落とす* 1と自然に感じられなくなりますが、ドロップは基本的な計算です。
Steven Jeuris

13

これはすべて非常に波状ですが、Theta(c)を使用せず、代わりにTheta(1)を使用する数学的な理由があります。代わりにBig O表記を使用してこれを示します。

これは、Big Theta(およびBig OおよびBig Omega)表記のプロパティと関係があります。あなたが成長率を持つ関数がある場合はO(g(x))成長率や他のいくつかの定数であるが、あなたは彼らが同じ成長率を持っていると言うでしょう。あれはO(c * g(x))cO(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)


3

もちろん、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特別な意味があるかどうか疑問に思いました
user10326

5
@ user10326:いいえ、c必ずしも定数でcはありません。実際には定数として解釈される必要があることを明示的に指定しない場合は変数なので、これはによって回避されるわずかな違いです1
blubb

わかりましたが、一定の時間を表しています。
user10326

2
@ user10326:いや、いや、それはないではない一定の時間を表しています。これは、cとともに直線的に増加する時間を表します。1は決して変更されないのに対し、cの値を変更しないようにするために何か追加のものが必要なので、これらは異なります。
jprete '24

1
@ user10326:または、もっと簡単に言うとc、定数ではありません。c手紙です。他の文字は変数を表しますが、読者はこれが同様にそうでないことをどのように知ると思いますか?
Random832

0

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


しかし、なぜあなたの例でn^0はなくn^1、一定の時間を表すと言うのですか?
user10326

@ user10326、n ^ 1 = nは定数ではないため。それは直線的に成長します。
Peter Taylor、

0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.