web-dev-qa-db-ja.com

誰もビッグオ対ビッグオメガ対ビッグシータを説明できますか?

可能性のある複製:
ビッグシータ表記-ビッグシータは正確には何を表しますか?

理論的には理解できていると思いますが、把握しにくいのは3つのアプリケーションです。

学校では、常にアルゴリズムの複雑さを示すためにBig Oを使用しました。たとえば、バブルのソートはO(n ^ 2)でした。

さて、もう少し理論を読んだ後、ビッグオーが唯一の尺度ではないことがわかりました。少なくとも2つの他の興味深いものがあります。

しかし、ここに私の質問があります:

Big Oは上限、Big Omegaは下限、Big Thetaは2つの組み合わせです。しかし、それは概念的にはどういう意味ですか?グラフ上での意味を理解しています。私はその例を見ました。しかし、それはアルゴリズムの複雑さにとって何を意味するのでしょうか? 「上限」または「下限」はどのようにそれと混合しますか?

私はちょうどそのアプリケーションを取得しないと思います。定数cを掛けると、n_0 f(x)がg(x)より大きい場合、f(x)はO(g(x))と見なされますが、実際には何を意味するのでしょうか?なぜf(x)に値cを乗算するのでしょうか?問題ない。

42
Doug Smith

大きなO表記、およびその親類、大きなシータ、大きなオメガ、小さなオ、小さなオメガは、関数が限界点でどのように動作するかについて何かを言う方法です(たとえば、無限に近づくときだけでなく、近づくときも) 0など)、関数について他に多くのことを言わずに。それらは、アルゴリズムの実行スペースと時間を記述するために一般的に使用されますが、漸近的挙動に関する数学の他の分野でも見ることができます。

半直観的な定義は次のとおりです。

関数g(x)は、O(f(x)) if from some point on ''、g(x)はc * f(x)よりも低く、cは定数です。

他の定義も同様です。シータはg(x) f(x)の2つの定数倍の間にあることを要求します。オメガはg(x)> c * f(x)を要求し、バージョンは、これがすべてのそのような定数に当てはまることを要求します。

しかし、たとえば、アルゴリズムの実行時間がO(n ^ 2)であると言うのはなぜ面白いのでしょうか?

興味深いのは、主に、理論的なコンピューターサイエンスでは、大きな入力に対するアルゴリズムの動作に最も関心があるためです。これは、小さな入力では、アルゴリズムの実行時間が、実装、コンパイル、ハードウェアなど、アルゴリズムを理論的に分析する際にあまり面白くないものによって大きく異なる可能性があるためです。

ただし、成長率は通常、アルゴリズムの性質に依存するため、アルゴリズムを改善するには、解決しようとしている問題に関するより深い洞察が必要です。これは、たとえば、ソートアルゴリズムの場合で、O(n ^ 2)で実行する単純なアルゴリズム(バブルソート)を取得できますが、これをO(n log n)に改善するには、真に新しいアイデアが必要です。 、マージソートまたはヒープソートで導入されたものなど。

一方、正確に5n秒で実行されるアルゴリズムと、1000n秒で実行されるアルゴリズム(長いあくびとn = 3の起動ブレークの違いなど)がある場合は、 n = 1000000000000、スケールの違いはそれほど重要ではないようです。ただし、O(log n)を使用するアルゴリズムがある場合、ほぼ317,098年ではなく、おそらく定数を掛けたlog(1000000000000)= 12秒待機する必要があります。は、まったく異なる規模です。

これにより状況が少し明確になることを願っています。勉強を頑張ってください!

38