OとΩは最悪の場合と最良の場合にどのように関係しますか?


33

今日の講義では、バイナリサーチを使ってソートされた配列の要素を見つけるための非常に簡単なアルゴリズムについて議論しました。要素の配列の漸近的な複雑さを判断するように求められました。n

私の考えは、は最悪の場合の操作の数であるため、より具体的にはまたはことは明らかです。しかし、たとえば、最初に検索された要素にヒットした場合など、より良い結果を得ることができます-下限はです。O(logn)O(log2n)log2nΩ(1)

通常、アルゴリズムの最悪の場合の入力のみを考慮するため、講師はソリューションをとして提示しました。Θ(logn)

しかし、最悪の場合のみを考えるとき、与えられた問題のすべての最悪の場合が同じ複雑さを持っているとき、と表記を持つことのポイントは何ですか(は私たちが必要なすべてでしょう?)。OΩΘ

ここで何が欠けていますか?


@Smaji:「最悪のケースだけを考えるとき、すべての最悪のケースが同じ複雑さを持っているときに大きなOと大きなOmega表記を持つことの意味は何ですか?(シータが必要なものすべてですよね?)」明確にしてください。
タンモイ14年

@Smajl:あなたの質問は次のとおりだと思います:アルゴリズム分析におけるBig OおよびBig Omega表記法の必要性は何ですか?私は正しいですか?
タンモイ

5
O(log2n)はよりも具体的ではなく、同じクラスの関数を示します。O(logn)
ラファエル

log2(n)と同じである(ビッグOにおける他の要因のような削除することができ、従って2だけ要因が示す。log(b)/log(2)×logb(n)
CTRL-ALT-delor

回答:


39

Landau表記は、関数の漸近境界を示します。、、およびの違いについては、こちらをご覧ください。OΩΘ

最悪の時間、最高の時間、平均時間、またはあなた自身の名前の時間は、特定の最高のランタイムのシーケンス、最低のシーケンスなどの個別のランタイム関数を表します。n

それ自体、2つは互いに関係ありません。定義は独立しています。これで、実行時関数の漸近境界を作成できます。上限()、下限()、または両方()。最悪の場合、最高の場合、またはその他の場合のいずれかに対応できます。Ω ΘOΩΘ

たとえば、バイナリ検索では、最適なランタイム漸近および最悪の漸近を取得し。Θ log n Θ(1)Θ(logn)


私にとっての重要なポイントは、漸近有界関数のいずれについても最悪の場合、最高の場合の分析を実行できることです。私にとって、それはビッグOと最悪のケースの分析の独立性を示しています。ありがとう!
パトリック

1
@Patrickまったくそうではありません。最初に、最悪、平均、または最高のケースを分析するかどうかを決定します。次に、コスト関数(または可能な限り適切な近似値)を考え出します。その場合にのみ漸近性を使用します(もしあれば)。
ラファエル

17

次のアルゴリズム(または手順、またはコードなど)を検討してください。

Contrive(n)
1. if n = 0 then do something Theta(n^3)
2. else if n is even then
3.    flip a coin
4.    if heads, do something Theta(n)
5.    else if tails, do something Theta(n^2)
6. else if n is odd then
7.    flip a coin
8.    if heads, do something Theta(n^4)
9.    else if tails, do something Theta(n^5)

この関数の漸近的な振る舞いは何ですか?

最良の場合(は偶数)、ランタイムはおよびですが、は何でもありません。Ω N O N 2ΘnΩ(n)O(n2)Θ

最悪の場合(は奇数)、ランタイムはおよびですが、は何でもありません。Ω N 4O N 5ΘnΩ(n4)O(n5)Θ

場合には、ランタイムは。Θ N 3n=0Θ(n3)

これは少し不自然な例ですが、境界とケースの違いを明確に示すためだけです。実行しているアクティビティに既知の境界がない場合、完全に決定論的な手順で区別を意味のあるものにすることができます。Θ


1
これを決定論的にするには、ケースに沿って分割します。nmod4
フォンブランド

4

必ずしも。この場合、つまりソートされた配列でのバイナリ検索では、次のことがわかります。(a)バイナリ検索は最大ステップを実行します。(b)実際にこの多くのステップを強制する入力があります。したがって、がバイナリ検索のワーストケース入力の実行時間である場合、と言うことができ。T n T n = Θ log n [logn+1]T(n)T(n)=Θ(logn)

一方、他のアルゴリズムでは、正確に計算できない場合があります。その場合、最悪の場合の入力の実行時間の上限と下限の間にギャップがある場合があります。T(n)

さて、ソートされた配列を検索するためには、もっと真実があります。つまり、ソートされた配列を検索するためのアルゴリズムはすべてを検査する必要があります。ただし、この種の下限については、問題自体を分析する必要があります。(ここでアイデアです:任意の時点で、検索アルゴリズムは、いくつかのセットを除外していない、それが探している要素は、可能な位置のA慎重に細工された入力は、そのことを保証することができます。されます最大で 1に削減されます。)S [ N ] | S | 2[logn+1]S[n]|S|2


1

あなたは正しい、多くの人がを使用するべきであるときにだらしなく使用する。たとえば、アルゴリズムアナリストは時間関数なり、すぐにと結論付けることができます。 、しかし、よりシャープなアサーションはます。この忘却的な振る舞いは2つの理由によるものです。第一に、多くの人は、が長い歴史のために、より人気があり、受け入れられると考えています。(および)は1976年(ドナルドクヌース)にのみ導入されましたが、1世紀以上前に導入されたことを思い出してください。第二に、OΘT(n)=n2+n+2T(n)=O(n2)T(n)=Θ(n2)OΘΩOキーボードで簡単に使用できますが、は使用できません!Θ

技術的な観点からは、しかし、慎重なアナリストが使用することを好む主な理由介して後者よりもかつてのカバー「大きいの領土」ということです。バイナリ検索の例を取り上げてを使用する場合は、2つのアサーションを作成する必要があります。\ 1つは最適な場合、つまりで、もうつは最悪の場合、つまり。、我々は唯一の主張、すなわち作る。数学的には、カバーされる関数もでカバーされますが、逆は必ずしも当てはまりません。OΘΘΘ(1)Θ(logn)OO(logn)ΘO


ようこそ、回答を投稿していただきありがとうございます!しかし、ここであなたのポイントが何であるかはわかりません。最初の段落では、いくつかの推測を提供します。2番目では、「だらしない」という観点自体を提案します。「それは平均ケースである」と言っても、同じクラス内であることを除いて、ベストケースについては何も言いません。「それは平均ケースです」と言うことは、同じ上限を意味ます!最良のケースに関する追加情報を伝えたい場合は、どちらの方法でも明示的に提供する必要があります。したがって、ΘでOを使用する点をどのように説明しているかわかりません。O(logn)Θ(logn)
ラファエル

@Raphael 2つの表記法の定義を参照します。さらに、それらは実行時間の漸近的な「成長率」を分類するために使用され、さまざまな回答やコメントによって伝播される実行時間自体ではないことに注意してください。
ハメッドナッサー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.