web-dev-qa-db-ja.com

なぜビッグシータではなくビッグオーが教えられるのですか?

Big O表記は関数に上限を提供しますが、Big Thetaは厳密な制限を提供します。ただし、Big O表記法は、通常(そして非公式に)教えられ、実際にBig Thetaを意味するときに使用されることがわかりました。

例えば「Quicksort is O(N ^ 2)」は、より強力なステートメント「Quicksort isΘ(N ^ 2)」に変えることができます

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

Wikipedia メモ:

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

22
tskuzzy

あなたは通常、パフォーマンスを分析するときに最悪のケースにのみ興味があるからです。したがって、上限を知っていれば十分です。

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

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

さらに、タイトな境界は、多くの場合、計算がより困難です。

以下も参照してください:

27
Falcon

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

9
MSalters