関数an + bがO(n ^ 2)およびΘ(n)に属するというステートメントを説明してください。


12

私は線形関数を持っているとしましょうf(n)= an+b、この関数がO(n 2)に属していることを証明する最良の方法は何Θ(n)ですか?

ここでは数学的な厳密さは必要ありません。プログラマーの回答が必要です。説明の論理的な方法。

これがまさに数学のQ&AではなくプログラマーのQ&Aに質問を投稿しなかった理由です。


2
@EmmadKareem文献では、基本的にΘ(n)であるタイトな境界を表すために、しばしばビッグO表記が無造作に使用されることがよくあります。Big Oは実際には上限です。
オタク

1
@EmmadKareem "O(n)の上限はn * nではありません。" ,, O(n)の上限はありません。O(n)自体が上限を定義します。実際には、条件を満たす条件を満たす関数のセットを含めることができます。f(x)∈O(g(x))は、c> 0(eg c = 1)およびx0(eg x0 = 5)が存在するため、f(x )<cg(x)x> x0の場合。
オタク

2
@EmmadKareem実際にはO(n)\ subset O(n ^ 2)\ subset O(n ^ 3)など、したがって\ subsetの推移性によるf \ in O(n ^ 2)。\ subsetは\ subseteqではないことに注意してください。
スカーフリッジ

6
「プログラマーの回答が必要です。論理的な説明方法が必要です。」-さて、「論理」をどのように定義しますか?数学は論理的です。ここでは、厳密な考えに満たないものは間違っています。トピックの説明を試すことはできますが、その背後にある(そうでない場合は難しくない)数学を消化しないと、実際にそれを取得できません-それが何を意味するのかがわからなくなるだけです。
タマスシェレイ

2
@Geek:数学のことですか?cs.SEも良いアドレスです。
ラファエル

回答:


20

Big Oh表記(O、Theta、Omega)は、関数の成長率に関するものです。

アルゴリズムを実装するとき、データセットを増やすとランタイムがどのように変化するかという特定の特性があります。アルゴリズムを最適化して、100倍高速に実行できるようになりました。確かに、これは素晴らしいことですが、本質的には同じアルゴリズムです。同様に、数年で、コンピューターは現在の2倍の速度になる可能性があります。

Landau表記は、これらの一定の要因を抽象化します。これは、アルゴリズムがいるかどうか気にしないf倍の速度別のアルゴリズムとして常にあるgかもしれない:g4倍高速に実行するように最適化することができ、またはあなたの代わりに高速なハードウェアを購入することができるかもしれません。この観点から見ると、それらは「同じ」と言うかもしれません。(それは、実際に一定の要因を(常に)無視できるということではありません。)

Big ohは上限を指定します<=。これはリレーションに似ています。

あなたはそれ1 < 2が真実であることに同意するでしょう。1それは他のどの数字よりも小さくてはいけないということですか?確かにそうではありません。より大きい数の無限の量があります1

成長率についても同様です。O(n)は線形に(またはよりゆっくり)成長するすべての関数のセットを示します。O(n^2)一方、これらの関数はすべて、2次の強制性(またはより遅い)で成長します。線形関数は、2次関数よりもゆっくりと成長することに同意するでしょう。

これが、関数が複数の「Big-oh」クラスに属することができる理由です。

以下は、さまざまな関数との比較です制約:(Knuthの具象数学から)

成長率の比較

左から右に、関数はより速く成長します。

また、はここに画像の説明を入力してください、2> 1であるため、n ^ 2はn ^ 1よりも速く成長します。

定義

定義オメガ

「fはgと同じくらい速く成長します」

定義ビッグああ

「fはgと同じくらい遅いか、同じくらい速く成長します」

定義シータ

上記の2つの組み合わせ。関数fはとして「同等に高速に」成長すると言いgます。それは等価関係です。

解釈

2つのアルゴリズムとがあるfとしgます。

オメガ

を想定するとgのシータではないfgのオメガでのf予算に関係なく、システムに追加できる一定の量の計算能力はなく、f常にのように高速で実行されgます。

ビッグオハイオ州

と仮定するとgのシータではないfgのf十分なデータがある場合は、システムにどれだけの計算能力を追加してfg、常によりも高速に実行されます。

証明

本当にこれを証明しようとしている場合、関数が必要な条件を満たすことをランダウ記法の定義を使用して示す必要があります。

だから、の値を見つける必要があるcdn_0条件が成立するようになっています。

下限については、次の方法でこれを行うことができますc

証明

私が完全に大丈夫cよりも小さいとarbitrarily意的に定義していることを理解することが重要a-1です。Theta(g)の定義は、「存在する」と述べていcます。0より大きい限り、任意の値を指定できます(a正の実数の場合、a - 1実際には負になる可能性があるため、証明を少し変更する必要があります)。

(私はa正であると仮定していますが、そうでない場合、関数はの大きな値に対して常に負にnなります。これは、ランタイムを示す関数には意味がありません。)

上限についても試してみることができますが、非常に似ています。方法がわからない場合は、証拠を提供できます。

ヒント:で始まる d > a + 1

注意

間違った方法でそれを証明しないことが重要です。(an + b)がO(n)にあり、そこから進むと仮定した場合、あなたが望むものを証明していません。すべてのステップが双方向に行われていることを確認する必要があり=>ます<=>


2
それでおしまい。数学のせいでひどい人はびっくりしますが、実際はとても簡単です。
タマスシェレイ

質問の状態:「私はここに数学的な厳密さを必要としない、私はプログラマの答えを必要とする...」記法はこの回答で使用し、質問のために良いフィットのようにしていません
ブヨ

1
@gnatうーん、ある時点で質問が「証明する」と思った。とにかく、数学的な定義の解釈を追加しました。
phant0m

@ phant0m素晴らしい答え。まさに私が探していたもの。元の質問では「数学」は特に求められていませんでしたが、答えの数学はそれをより強固にしました。トンありがとう。
オタク

@Geek、私はあなたがそれを気に入ってうれしいです。さらに質問がある場合は、お気軽に質問してください。回答を明確化/拡張できます。
phant0m

5

多項式を扱うときは、多項式の次数だけを気にします。それは、an + bあなたが気にするだけだからnです。もしそうならan^3 + bn^2 + cn + d、あなたは気にするだけでしょうn^3

したがって、次数dの多項式は常にになりますΘ(n^d)。シンプル。

今、私たちは基本的にΘとO.の違いについて話をする必要があり、それは間違いと同じだ==<=それぞれ。だから、Θ(n)それは手段の一定の係数の中に常にnO(n)は、常に一定の係数内か、nそれ未満であることを意味しnます。

この手段で任意の関数ということはΘ(s)、いずれかのためにs、また中になりますO(s)。機能はしている場合にも、Θ(s)そしてsいつもより少ない他のいくつかの機能よりもt、その関数はであるO(t)が、ありませんΘ(t)

完全を期すために、もありますΩ(n)。場合Θを表す==O表し<=Ω表しています>=。そうan + bであるΩ(1)Θ(n)O(n^2)

先ほど言ったように、どのクラス多項式が含まれているかは簡単にわかります。次数を見るだけです。他にも簡単に使用できる機能がいくつかあります。

任意の形態の機能a^bn任意用abですΘ(a^n)。任意の値についてc >= a、それらはにありO(c^n)ます。すべての多項式はですO(2^n)。本質的に、これは指数関数が常に多項式を打ち負かし、指数関数の基底が重要であると言うだけです。

対数は反対です。1つlog_b nは、Θ(log n)forにありますb。つまり、底は対数には関係ありません。これは、対数の異なる基数間の切り替えが定数を乗算するだけなので、理にかなっています。対数関数もあります。O(n)つまり、対数関数はどの多項式よりも小さくなります(少なくとも1次)。

これらの関数の合計を考えると、最大のものが「勝ちます」。そうn + log nであるΘ(n)ので、n用語が支配的log n用語を。乗算はより複雑です。CSの場合、知っておく必要があるのnlog nは、nとの間だけですn^2


1
かなり良い。説明上記の私の回想あたり古典の近くにあるアルゴリズムの設計マニュアルそれを取得として
ブヨ

1
@Tikhlon素敵な文章。だから+1。でも私が受け入れたほうがもっと良かった。
オタク

-2

多くの数学を使用せずに、関数f(n)= an + bを取得し、すべての定数を削除します。したがって、このf(n)= nのようになります。 Θ(n)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.