54

重複の可能性:
ビッグ シータ記法 - ビッグ シータは正確には何を表しているのでしょうか?

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

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

もう少し理論を読んだ後、Big Oh だけが尺度ではなく、他に少なくとも 2 つの興味深い尺度があることがわかりました。

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

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

私はそのアプリケーションを取得していないと思います。定数 c を掛けると、ある値 n_0 f(x) が g(x) より大きい場合、f(x) は O(g(x)) と見なされることを理解しています。しかし、それは実際には何を意味するのでしょうか? なぜ f(x) に値 c を掛けるのでしょうか? 地獄、Big O表記では倍数は関係ないと思っていました。

4

1 に答える 1

44

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

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

関数g(x)は、「ある時点から」、g(x)がc * f(x)よりも小さい場合にO(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)を使用するアルゴリズムを使用している場合は、log(1000000000000)= 12秒待機する必要があります。これは、定数がいくら大きくても、ほぼ317、098年ではなく、定数を掛けたものになる可能性があります。つまり、完全に異なるスケールです。

これにより、状況が少し明確になることを願っています。あなたの研究で頑張ってください!

于 2012-12-30T23:30:29.370 に答える