web-dev-qa-db-ja.com

Big OのOとは何ですか?

Big O表記でのBig and Oとは何ですか?私は定義を読みました、そしてそれは[〜#〜] o [〜#〜]が何であるかを教えてくれません== 'oh'と発音されました。たとえば、[〜#〜] o [〜#〜](n)は線形アルゴリズムの複雑さであり、nは操作の数である可能性があることを理解しています。 [〜#〜] o [〜#〜]とは何ですか?

26
Karen15

まあ、私の推測は、 がwikipedia と一致する順序だと思います。

編集:(自分の(改善点はありがたい)) ドイツ語版ウィキペディアの記事からの翻訳

の順序(ドイツ語: "Ordnung von")の(== --- ==)orderの記号としての大文字のO(当時は実際には大文字のオミクロン)は、解析的数論に関する彼の本の第2号にあるドイツの数論者Paul Bachmanは1894年に登場しました。この命名法が今日、特にドイツ語の用語。

32
back2dos

「ビッグ」は「資本」を意味し、「O」は「複雑さの順序」のように順序を意味します。 「複雑さの次数」をO(f(x))と表記する慣例により、たとえば大文字の「O」または「Big O」でそのように名付けられました。 「誰もが」それが何を意味するのかを理解しているため、誰もそれについてあまり話しません。それを理解しても、複雑度分析を理解するのに実際には役立ちません。

複雑さの分析を理解するために、topgun_ivardによって投稿されたリンクから始めるとよいと思います。データ構造やアルゴリズムをカバーする優れた入門テキストも役立つかもしれません。

16
Ethel Evans

[〜#〜] o [〜#〜]は順序を表します。

元々は、ドイツの数学者Paul Bachmannによって 数論に関する本の第2巻Die Analytische Zahlentheorie、1894年に発行されました( 401ページ) 。彼は、彼が最初に表記法を使用する式の後、

(...)wenn wir durch das ZeichenO(n)eindeGrösseausdrücken、deren Ordnung in Bezug auf ndie Ordnung vonnnichtüberschreitet(...)

私の翻訳:

(...)ここで、O(n)と表記すると、nn(...)の順序を超えません

他の人が言ったこととは対照的に、彼のテキストには、これが実際にギリシャの首都オミクロンであることを示すものはありません。彼はギリシャ語とラテン語の両方の文字をたっぷり使用しているため、実際には区別する方法はありません。彼がテキストで「Ordnungn log n」などを継続して使用していることを考えると、「Ordnung」(ドイツ語で「order」を意味する)を表していることは明らかです。疑いはありましたが)いずれにせよ、それでも派手なギリシャ語Oの使用が未解決のままになる可能性があります。

ただし、オミクロンの起源は、関連する概念のシンボルオメガ(Ω)とシータ(Θ)を 彼の論文Big Omicronに導入したドナルドクヌースのため)ビッグオメガとビッグシータ 、または Hardy and Littlewood は、以前にオメガシンボルを導入した人です。

12
user34528

私はこれが好きです 記事 、あなたもそれが役に立つことを願っています!

記事のセクションを引用する:
大きなギリシャ文字

Big Oはよく誤用されます。 Big OまたはBig Ohは、実際にはBig Omicronの略です。これは、漸近的な複雑さの上限を表します。したがって、アルゴリズムがO(n log n)の場合、上限がcn log nになるような定数cが存在します。

N(n log n)(Big Theta)は、それよりも強く束縛されています。このようなアルゴリズムは、c1n log n <f(n) <c2n log nとなるような2つの定数c1とc2が存在することを意味します。

Ω(n log n)(Big Omega)は、アルゴリズムにcn log nの下限があることを示しています。

他にもありますが、これらは最も一般的で、Big Oが最も一般的です。このような区別は通常重要ではありませんが、注目に値します。結局のところ、正しい表記は正しい表記です。

ビッグオーとは?

Big O表記法は、キーファクターが無限大に向かう傾向がある場合に、成長率をキーファクターまで下げることにより、アルゴリズムの相対的な複雑さを説明しようとします。このため、漸近的複雑さというフレーズをよく耳にします。その際、他のすべての要素は無視されます。それは複雑さの相対的な表現です。

ビッグOとは何ですか?

Big Oはアルゴリズムのパフォーマンステストではありません。また、他の要素を無視する傾向があるという点で、概念的または抽象的です。ソートアルゴリズムの複雑さは、通常、キーファクターとしてソートされる要素の数に削減されます。これは問題ありませんが、次のような問題は考慮されていません。

メモリ使用量:アルゴリズムによっては、別のアルゴリズムよりもはるかに多くのメモリを使用する場合があります。状況に応じて、これはまったく関係のないものから重大なものまでさまざまです。比較のコスト:要素の比較は非常にコストがかかるため、アルゴリズム間の実際の比較が変更される可能性があります。要素の移動のコスト:要素のコピーは通常安価ですが、必ずしもそうとは限りません。等.

5
topgun_ivard

「f(x)はg(x)のbig-ohです」

関数の成長を予測する数学的な方法です。

Fおよびgを、整数のセットまたはセットまたは実数のセットから実数のセットへの関数とします。 | f(x)|のような定数Cとkがある場合、f(x)はO(g(x))であると言います。 <= C | g(x)|どこでもx> k。

これは「f(x)はg(x)のbig-ohである」と読みます。

Big-Oは、ドイツの数学者エドマンドランダウにちなんでランダウシンボルと呼ばれることもあります。それ以上の意味はないと思います。同様に、big-Omegaおよびbig-Thetaの表記法もあります。シンボルは、常にシータを使用して三角形の角度が高校の平面幾何学クラスにあったことを示すのと同じように任意です。

訂正 @ back2dosは、順序を参照するOに十分な説明を提供しました。よくやった。彼の答えを見てください。

ドナルド・クヌースはそれをコンピュータープログラムの複雑さの研究に適用しました。

表記法が使用された理由を知りたい場合は、

「分析Zahlentheorie」(ポールバッハマン作、1892年)

2
Jonathan Henson

編集:私が間違っていることが判明しました。それでも、これは誰かがシンボルをまっすぐに保つのに役立つので、削除するつもりはありません。


実際、それはnotラテン文字Ohで、ギリシャ文字Omicronです。残念ながら、これら2つはまったく同じグリフを持っているため、時間の経過とともに、元のバージョンは破損し、現在はOhになっています。

シンボルの選択は実際には特定の意味はありません、それはニーモニックデバイスとして選択されました:

  • オミクロンにはM-I-C-R-Oという文字が含まれており、オミクロンシンボルのセマンティクスはおおよそ「より小さい」ことを意味します
  • OmegaにはM-E-G-Aという文字が含まれており、Omegaシンボルのセマンティクスはおおよそ「より大きい」を意味します
  • シータ(Θ)は等号のように見え、シータ記号のセマンティクスはおおよそ「等しい」を意味します

それでおしまい。それには本当の意味はありませんが、意味を覚えやすくするための言葉の遊びです。

2
Jörg W Mittag