Big O表記のBigとOとは何ですか?私は定義を読みましたが、Oが「oh」と発音されていることはわかりません。たとえば、O(n)は線形アルゴリズムの複雑さであり、nは操作の数になる可能性があることを理解しています。しかし、Oとは何ですか?
Big O表記のBigとOとは何ですか?私は定義を読みましたが、Oが「oh」と発音されていることはわかりません。たとえば、O(n)は線形アルゴリズムの複雑さであり、nは操作の数になる可能性があることを理解しています。しかし、Oとは何ですか?
回答:
さて、私の推測は順序であり、これはウィキペディアと一致します。
編集:(私自身の(改善点を歓迎))ドイツのウィキペディアの記事からの翻訳
(ドイツ語: "Ordnung von")の順序のシンボルとしての大文字O(実際には当時の大文字オミクロン)は、ドイツの数論者Paul Bachmanが分析数論に関する本の第2号で最初に使用したこの表記法は、特にドイツ語の用語で、この命名法が今日広く関連付けられている別のドイツの数論者であるエドマンド・ランダウの研究により人気を得ました。
「大」は「資本」を意味し、「O」は「複雑さの順序」のように順序を意味します。このように命名されたのは、「複雑さの順序」をO(f(x))として書く慣習、たとえば大文字の「O」または「大きなO」で命名されたためです。「誰も」がそれが何を意味するのか理解しているので、誰もそれについてあまり語りません。
複雑さの分析を理解するために、topgun_ivardによって投稿されたリンクを開始するのに適した場所だと思います。データ構造またはアルゴリズムをカバーする優れた入門教科書も役立ちます。
Oは順序を表します。
もともとはドイツ語で数学者ポール・バックマンによって導入された数論の上の彼の本の第二巻ダイAnalytische Zahlentheorie 1894年に出版され、(P。401) 。彼は、最初に記法を使用する式の後に注意します。
(...)wen wir durch das Zeichen O(n) eindeGrösseausdrücken、deren Ordnung in Bezug auf n die Ordnung von n nichtüberschreitet(...)
私の翻訳:
(...)表記O(n)で、nを参照する次数がnの次数を超えない大きさを示します(...)
他の人が言ったこととは対照的に、彼のテキストには、これが実際にギリシャの首都オミクロンであることを示すものは何もありません。彼はギリシャ文字とラテン文字の両方をたくさん使用しているため、実際に伝える方法はありません。本文で「Ordnung n log n」などを継続して使用していることを考えると、いずれの場合も「Ordnung」(疑問がある場合はドイツ語で「order」を意味する)を意味していることは明らかですが、派手なギリシャのO
ただし、オミクロンの起源は、ドナルド・クヌースが関連概念の記号オメガ(Ω)とシータ(Θ)を導入したために、おそらくレトロニムです。 彼の論文ビッグオミクロンとビッグオメガとビッグシータ、またはおそらくハーディとリトル人以前にオメガ記号を導入しました。
私はこの記事が好きです、あなたもそれが役に立つことを望んでいます!
記事のセクションを引用:
Big Greek Letters
Big Oはよく誤用されます。Big OまたはBig Ohは、実際にはBig Omicronの略です。漸近的な複雑さの上限を表します。したがって、アルゴリズムがO(n log n)の場合、上限がcn log nになるような定数cが存在します。
Θ(n log n)(ビッグシータ)は、それよりも厳密にバインドされています。このようなアルゴリズムは、c1n log n <f(n)<c2n log nとなる2つの定数c1およびc2が存在することを意味します。
Ω(n log n)(Big Omega)は、アルゴリズムのcn log nの下限があることを示しています。
他にもありますが、これらは最も一般的であり、Big Oはすべての中で最も一般的です。通常、このような区別は重要ではありませんが、注目に値します。結局、正しい表記は正しい表記です。
Big Oとは何ですか?
Big O表記法は、キーファクターが無限に向かう傾向がある場合に、キーファクターに対する成長率を減らすことにより、アルゴリズムの相対的な複雑さを表現しようとします。このため、「漸近的な複雑さ」というフレーズをよく耳にします。そうすることで、他のすべての要因は無視されます。これは複雑さの相対的な表現です。
ビッグOとは何ですか?
Big Oは、アルゴリズムのパフォーマンステストではありません。また、他の要因を無視する傾向があるという点で、概念的または抽象的です。ソートアルゴリズムの複雑さは、通常、キーファクターとしてソートされる要素の数まで削減されます。これは問題ありませんが、次のような問題は考慮していません。
メモリ使用量:あるアルゴリズムは、別のアルゴリズムよりもはるかに多くのメモリを使用する場合があります。状況によっては、これは完全に無関係なものから重大なものまであります。比較のコスト:要素の比較は非常に高価である可能性があり、アルゴリズム間の実際の比較を変更する可能性があります。要素の移動のコスト:要素のコピーは通常安価ですが、必ずしもそうであるとは限りません。等
「f(x)はg(x)のビッグオー」
関数の成長を予測する数学的な方法です。
fとgを、整数のセットまたは実数から実数セットまでの関数とします。| f(x)|のような定数Cとkがある場合、f(x)はO(g(x))であると言います。<= C | g(x)| x> kの場合。
これは、「f(x)はg(x)のビッグオー」と読むでしょう。
big-Oは、ドイツの数学者エドモンド・ランダウにちなんで、ランダウのシンボルと呼ばれることもあります。それ以上のものを意味するとは思わない。また、同様のビッグオメガ表記とビッグシータ表記もあります。シンボルは、高校のPlanar Geometryクラスにある三角形の角度を示すために常にthetaを使用するのと同じくらい任意です。
訂正 @ back2dosは、Oが注文を参照しているという十分な説明を提供しました。よくやった。彼の答えをご覧ください。
ドナルド・クヌースはそれをコンピュータープログラムの複雑さの研究に応用しました。
表記法が使用された理由を見つけたい場合は、読む必要があります
ポール・バッハマンによる1892年の「アナリチシェ・ザーレンテリエ」
編集:私は間違っていることが判明した。それにもかかわらず、これは誰かがシンボルをまっすぐに保つのに役立つかもしれないので、私はそれを削除するつもりはありません。
実際に、それはだないラテン文字ああ、それはギリシャ文字だオミクロン。残念ながら、これら2つはまったく同じグリフを持っているため、時間が経つにつれて元のバージョンが破損し、現在はOhになっています。
シンボルの選択は実際には特定の意味を持たず、ニーモニックデバイスとして選択されました。
それでおしまい。それには本当の意味はありません。セマンティクスをより簡単に覚えるのを助けるために、もしあなたがそうするなら、それは単なる言葉の遊びです。
更新:回答を整理し、より正確にしようとしています
Big O表記は、成長率に応じて機能を特徴付ける方法です。Oは順序を表します(1次はn、2次はn乗など)。そして、私が間違えなければ、これはN要素が与えられたメソッドランタイム(またはストレージ)の最悪のシナリオになります。次数が大きいほど、メソッドの実行は最悪になります。
たとえば、配列内のレコードを検索するのはO(1)です(ハッシュテーブルの実装もそうだと思います)。リンクリストの最後に値を追加すると、要素を追加する前にリストの最後に到達する必要があるため、O(N)になります。
この答えは私の最初の試みよりもわずかに正しいはずです:)