Big Thetaの代わりにBig Oが教えられるのはなぜですか?


21

Big O表記は関数の上限を提供しますが、Big Thetaは厳密な制限を提供します。しかし、Big O表記法は、通常、Big Thetaを本当に意味する場合に、一般的に(そして非公式に)教えられ、使用されることがわかります。

たとえば、「Quicksort is O(N ^ 2)」は、「Quicksort isΘ(N ^ 2)」という非常に強力なステートメントに変換できます。

Big Oの使用は技術的には正しいですが、Big Thetaのより一般的な使用はより表現力があり、混乱が少なくなりませんか?このBig Oがより一般的に使用される歴史的な理由はありますか?

ウィキペディアのメモ:

非公式に、特にコンピュータサイエンスでは、Big O表記法は、Big ThetaΘ表記法を使用することが特定のコンテキストでより実際に適切である場合に、漸近的タイトバインドを記述するためにしばしば乱用されることがあります。


3
これは実際には質問に関係しないことは知っていますが、クイックソートはtheta(N ^ 2)ではありません。O(N ^ 2)です。
jsternberg

Big Oは初心者/非CSの人々が知る必要があるものです。Big Thetaはアルゴリズムのイントロでカバーされているもので、すべての専攻で採用されているわけではありません。アルゴリズムクラスを持っている人は、必要に応じてBig O表記法をより深く読み込むことができます。ウィキペディアの引用が何を指しているのか分かりません。学術出版物では、Big OとBig Thetaを混同すると、カンファレンスでのどが切れてしまいます。シータを追いかけて一生を過ごす人もいますが、それは難しい問題です。
ジョブ

@jsternberg技術的にはあなたは正しいです。これも事実ですが、意味がありません:「どんな場合でもクイックソート(最悪、最高、...)はO(n ^ 100)です。しかし、OPにはもっと正確にすべきであることに同意します。QuickSort最悪ケースはTheta(N ^ 2)、クイックソート最良の場合は、シータ(NlogN)で、それぞれの場合において、我々はさまざまな機能を取得しますので。。
エルダー

回答:


26

通常、パフォーマンスを分析するときに最悪のケースに関心があるだけです。したがって、上限を知るだけで十分です。

与えられた入力に対して予想よりも速く実行される場合-それは問題ありませんが、重要なポイントではありません。それはほとんど無視できる情報です。

@Peter Taylorが指摘したように、一部のアルゴリズムには厳密な制約がまったくありません。O(n ^ 2)とOmega(n)であるクイックソートを参照してください。

さらに、多くの場合、厳密な境界の計算はより困難です。

こちらもご覧ください:


6
ただし、Big Oは必ずしも最悪のパフォーマンスに対応するとは限りません。クイックソートはO(2 ^ n)で実行され、100%正確であると言えます。アルゴリズムXがO(N ^ 2)ではなくTheta(N ^ 2)で実行されると言うと、はるかに意味があります。
tskuzzy

また、アルゴリズムを分析する場合、単なる上限ではなく、ほとんどの場合、厳密な境界が計算されます。私は、なぜ人々はできる限り表現力豊かなシータ記法を使用しないのかを尋ねています。
tskuzzy

9
ほとんどのプログラマーがそれを使用しない理由をお話ししました。私たちは怠け者であり、それほど正確にする必要はありません。必要な場合、誰も大きなシータの使用を止めません。さあ、やる あなたのアルゴリズムの選択は、それからあまり利益をもたらさないでしょう。大きなO表記法で混乱しているプログラマーは聞いたことがありません。私もそれをまったく混乱させない。
ファルコン

9

理由の1つは、Θが不明な場合が多いことです。たとえば、行列の乗算はO(n ^ 2.376)ですが、既知の厳密な限界はありません。確かに、私が知る限り、行列の乗算に厳密な限界があります、その値はわかりません。


しかし、それは問題の実行時間の境界であり、特定のアルゴリズムではありません。一般に行列の乗算は3次時間よりも速く解くことができますが、単純なアルゴリズムはどのような場合でもΘ(n ^ 3)です。
tskuzzy

5
@tskuzzy、クイックソートをしてください。O(n ^ 2)とOmega(n)であるため、シータ結合はありません。
ピーターテイラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.