漸近的成長率のどの定義を教えるべきですか?


35

標準的な教科書または伝統に従うとき、私たちのほとんどは、アルゴリズムクラスの最初の数回の講義で、大オー表記法の次の定義を教えます おそらく、すべての量指定子を含むリスト全体を提供することもあります。

f=Og iff c>0n00nn0fncgn
  1. f=og iff c>0n00nn0fncgn
  2. f=Og iff c>0n00nn0fncgn
  3. f=Θg iff c>0d>0n00nn0dgnfncgn
  4. f=Ωg iff d>0n00nn0fndgn
  5. f=ωg iff d>0n00nn0fndgn

ただし、これらの定義は、などの単純なことでも証明するのは簡単ではないため、私たちのほとんどはすぐに「限界のトリック」を導入するために動きます:5nログ4n+nログn=on10/9

  1. f=og場合存在している00リムnfn/gn0
  2. f=Og場合リムnfn/gn存在しない+
  3. f=Θg場合リムnfn/gn存在し、どちらもではない0+
  4. f=Ωg場合リムnfn/gn存在しないが0
  5. f=ωg場合リムnfn/gn存在している+

私の質問は:

oO\ Theta\ Omega、および\ omega 定義として制限条件を採用することを学部アルゴリズムクラスに教えることは大きな損失になりますか?とにかくそれは私たち全員が結局使用するものであり、量指定子の定義をスキップすることは皆の生活を楽にすることは私にはかなり明らかなようです。oOΘΩω

標準の -definitionsが実際に必要とされる説得力のある自然なケースに遭遇したかどうか、またそうでない場合は、とにかく標準の -definitions を維持する説得力のある引数があるかどうかをたいと思います。 c n 0cn0cn0


1
タグは実際には「教える」べきですが、関連するタグが見つからず、新しいタグを作成することはできません。
スリムトン

1
これは基本的に、数量詞を限界のイプシロンデルタ定義に吸収します。私の唯一の懸念は、多くのCS学生が分析を行っていないため、限界の理解はほとんど機械的なことです。しかし、彼らが迅速に計算できるようにするために、それは簡単です。
ヴォーグセンごと10

6
O()の2つの定義は同等ではないことに注意してください(同じ注意がΘ()とΩ()に適用されます)。偶数nに対してf(n)= 2n、奇数nに対してf(n)= 1の場合を考えてみましょう。f(n)= O(n)ですか?この場合、f(n)=Θ(n)と言うことができるように、limではなくlimsupを使用することを好みます(ただし、定義ではどちらも許可していません)。しかし、これは私の個人的な好みかもしれません(そして非標準的な慣習でさえあります)。私はクラスを教えたことがありません。
伊藤剛

2
@Tsuyoshi:「リミットトリック」のポイントは、必要な条件ではないが十分な条件だということだと思いました。(場合も必要です。)振動関数の反例には制限がありません。o Oo
アンドラスサラモン

1
各定義とプロパティで、シンボルをに置き換えてはいけませんか?の使用が学生として非常に邪魔であることがわかりました。===
ジェレミー

回答:


13

私は元の定義を数量詞で教えることを好みます。

IMO、人間は一般に、2つ以上の量指定子を直接交替して式と定義を理解するのに苦労しています。新しい数量詞を導入すると、定義の意味を明確にできます。ここでは、最後の2つの量指定子は「すべての十分に大きいnについて」を意味するだけなので、この種の数量化を導入すると役立ちます。

これらの概念を説明するために描いた絵は、量指定子のバージョンとよく一致しています。

制限の簡素化は、成長率の計算にのみ関心がある工学系の学生には有用ですが、コンピューターサイエンスの学生にはそれほど有用ではないと思います。実際、この単純化を使用すると、良いことよりも害になることがあります。

この考えは、イプシロン-デルタ定義の代わりに(多項式、べき乗、...、連鎖規則などの)導関数を計算するための規則を使用するという提案に似ていますが、IMHOは良い考えではありません。


最終的な支配の概念も役立ちます: iff。今があるIFF ST。\ esits M N > MのF N < G N F O G C > 0 、F X « C G X f(x)g(x)\esitsmn>mf(n)<g(n)fO(g)c>0f(x)cg(x
カヴェー

9

編集:リビジョン3のメジャーリビジョン。

私はクラスを教えたことがないので、私たちが教えるべきことについて納得のいくように主張できるとは思いません。それにもかかわらず、ここに私がそれについて考えたことがあります。

書かれている「制限トリック」を適用できない自然な例があります。たとえば、サイズが2倍になる固定長配列を使用して(つまり、配列のサイズを超えようとするたびに、「可変長ベクトル」(C ++のvector <T>など)を実装するとします。配列を現在の2倍に再割り当てし、すべての要素をコピーします)。サイズSnはアレイの)我々が格納Nベクトルの要素は、2より大きな最小の力であるかに等しいNSn)= O(n)と言いたいのですが、定義として書かれている「制限トリック」を使用すると、Sn)/ nは、範囲[1,2)で密に振動します。同じことがΩ()とΘ()にも当てはまります。

多少別の問題として、これらの表記を使用してアルゴリズムの複雑さを説明する場合、Ω()の定義は時々不便であると思います(その定義は一般的だと思いますが)。limsup fn)/ gn)> 0の場合に限り、fn)=Ω(gn))と定義する方が便利です。これは、n(頂点の数nが奇数のグラフ上の完全な加工問題など)。同じことがΘ()とω()にも当てはまります。

したがって、私は個人的に、次の定義がアルゴリズムの複雑さを説明するために使用するのに最も便利であることを見つけます:関数fgについて:ℕ→ℝ > 0

  • fn)= o(gn))limsup fn)/ gn)= 0の場合にのみ(これはlim fn)/ gn)= 0 と同等です。)
  • limsup fn)/ gn)<∞の場合にのみ、fn)= O(gn))
  • fn)=Θ(gn))0 <limsup fn)/ gn)<∞の場合のみ。
  • limsup fn)/ gn)> 0の場合に限り、fn)=Ω(gn))(これは、fn)がo(gn))ではないことに相当します
  • fn)=ω(gn))limsup fn)/ gn)=∞の場合のみ。(これは、fn)がO(gn))ではないことに相当します。)

または同等に、

  • FN)= O(GN))とのみすべてのための場合であれば、C > 0、十分に大きいため、NFN)≤ CGN)。
  • FN)= O(GN))と一部のみのためであればならC > 0、十分に大きいため、NFN)≤ CGN)。
  • fn)=Θ(gn))fn)= O(gn))およびfn)=Ω(gn))の場合にのみ
  • FN)=Ω(GN))場合にのみ、いくつかのためであれば、D無限に多くのために> 0、NFN)≥ DGN)。
  • FN)=ω(GN))毎および場合だけ、D > 0、無限に多くのためのNFN)≥ DGN)。

しかし、これが一般的な慣行であるかどうかはわかりません。また、教育に適しているかどうかもわかりません。問題は、代わりにliminfでΩ()を定義したい場合があることです(最初の定義で行ったように)。たとえば、「このランダム化されたアルゴリズムのエラーの確率は2 -Ω(n」と言うとき、エラーの確率が無限に多く nに対してのみ指数関数的に小さいことを意味しません!


私もlimsupの定義を使用しますが、limsup(ほとんどすべて)を見ていない学生のために、とにかく明示的な量指定子に拡張する必要があります。
ジェフ

@JeffE:ほとんどの学生がlimsupを見ていないことに同意します。したがって、limsupの定義を使用する場合は、代わりにクラスで数量詞を使用する必要があります。
伊藤剛

2
数量詞バージョンの問題は、数量化詞バージョンを覚えて視覚化することが難しいことです。は「上限点」と表現できるので、私は好きです。可能な説明は次のとおりです。「それはのようなものですことを除いて、シーケンスが収束しない場合は、シーケンス収束は、例えば非常に高速ないくつかのための間のアルゴリズム振動するので、場合にのみが動作します。、ゆっくりと他のために、その後、私たちは取ります最高限度点。」l i m l i m n nlmsあなたはplimlimnn
ハインリッヒアプフェルス

実際、実行時間が変動するアルゴリズムの自然な例はありますか?
ハインリッヒアプフェルムス

2
@Heinrich:n個の頂点でグラフの完全な一致を見つけるためのアルゴリズムの実行時間については既に述べましたが、それは自然な例としてカウントされますか?実行時間は振動しませんが、f(n)/ g(n)は振動する別の例を追加しました。この例ではスペースの複雑さについて説明していますが、同じ例の時間の複雑さには同じ特性があります。
伊藤剛

8

(1)より複雑な概念(2)f = O(g)をうまくキャプチャしないため(上で説明したように)、制限の使用は少し混乱します。私は通常、Natural(厳密に正の)数値からNatural数値(実行時間で十分です)までの関数について話します。

Dfn:f = O(g)すべてのnのCに対してf(n)<= C * g(n)がある場合


1
最初に、この定義が好きではありませんでした。なぜなら、「すべてn」と記述することは、O()表記が大きなnの関数の動作のみを考慮するという重要な事実をあいまいにするためです。ただし、どの定義を選択しても、この事実を定義とともに説明する必要があると思います。そのように考えると、この単純な定義を述べることは非常に良いようです。
伊藤剛

このキャプチャエッセンスながら、私は嫌い、もし全てについて、全てについてまで、及び次にそれ以外の場合は、しかし、この定義はこの関係をキャプチャできません。そのため、何らかの意味で行儀の良い関数について手を振る必要があります。n g n = 0 n N 0 g n = f n + 1 f = O g f(n)=nngn=0nN0gn=fn+1f=Og
アンドラスサラモン

2
範囲が自然数(0を含まない)である関数について説明するポイントは、g(n)= 0の問題にまったく該当しないことです。
ノーム

1
@Warren Victor Shoupは、計算数論に関する本で、実行時間分析で代わりにという表記を使用しています。log alen(a)loga
Srivatsanナラヤナン

1
@Warren(続き)これは、彼がそれを説明する方法です:「入力の面でアルゴリズムの実行中の時間を表現するには、我々は一般的に書くことを好むではなく。一つの理由は、審美的である:書き込み、実行時間がのビット長の関数であるという事実を強調もう一つの理由は、技術である:ビッグエンディアンのための任意のドメイン上の関数を含む見積り、適切な不等式がドメイン全体に保持する必要があり、そしてこのような理由のために、などの関数を使用するのは非常に不便です。これらの関数は、入力によっては消えるか、未定義です。alenaログalenaaOログ
Srivatsan Narayanan

5

私が基本的なコースを受講したとき、定義として、定理として他のものを与えられました。cn0

最初のものは、継続的というよりも離散的だと考える多くの人々にとってより自然であると思います。それはほとんどのコンピューター科学者です(私の経験では)。また、これらのことについて私たちが普段よりよく話している方法にも適合しています。「次数3の多項式関数があり、このには定数係数までの上限があります。」f

編集:この定義を使用すると、この話し方にさらに近づくことができます: (はこの定義を通常与えられている定義に接続することに注意してください)D = F N 0fO(g):⇔c,d>0n0:f(n)cg(n)+dd=fn0

制限事項は、ペンと紙を使用した複雑度クラスの計算に非常に役立ちます。

いずれにせよ、学生にとって、(できれば)同等の定義が豊富にあることを知ることは非常に役立つと思います。彼らはそれを理解し、定義が等しくない場合の違いを見つけ出せるはずです。


4

ほんの数年前にこれらの概念を研究してきましたが、私のクラスで理解するのが最も難しいものではありませんでした(誘導やコントラポジティブなどの概念とは対照的です)。私の意見では、限界とリンサップは微積分学に精通している人にとってより「直感的」です。しかし、そのような数学の基礎を持つ学生は、離散的な修飾子を処理できるように、とにかく理論的な背景を持っています。

また、さらに重要なことは、最終的にあなたの学生が他のcs理論の教科書を読み、おそらくいつか研究論文を読むことになることを忘れないでください。そのため、最初は理想的に考えられていなかったとしても、フィールドの標準表記に慣れている方がよいでしょう。標準の定義を取り入れれば、代替の定義を与えても害はありません。


3

この問題に関する興味深い見解については、ドン・クヌースのよく書かれた手紙「Calculation via O notation」をご覧ください。彼は、「A」、「O」、「o」の表記法で計算を教えるべきであるという逆の見解を主張しています。

注:彼は、標準の「O」表記法を定義する予備ステップとして「A」表記法を使用しています。量あるの(すなわち、)、もし 。特に、がと言うのは理にかなっています。A y x = A y | x | Y 100 A 200 バツAyバツ=Ay|バツ|y100A200


1
  1. 伊藤剛の定義はあまり正しくありません。リトルオメガとビッグオメガの定義では、limsupではなくliminfを使用する必要があります。big-thetaの定義には、liminfの下限とlimsupの上限の両方が必要です。

  2. f(n)= O(g(n))の定義の1つは、lim f '(n)/ g(n)<infinityであるような別の関数f'(n)> = f(n)が存在することです。

  3. 初心者が回答を投稿できるのにコメントはできないのはなぜですか?


1
項目1に関しては、私はすべての場合でリンサップを意味し、その理由は私の答えの2番目の段落で説明されています。
伊藤剛

残念ながら、これはスパムブロックメカニズムです。
Suresh Venkat

麻生、答えにラテックスを使用できます。
Suresh Venkat

1

まず、私がしようと開発し、学生にいくつかの直感を数式を表示する前に、。

  • 「マージソートと挿入ソート」が出発点として適切です。

f=Og iff c>0n00nn0fncgn
リムn

別の側面は、具体的な研究プログラムに大きく依存しているということです。私見は以前の主題に応じて定義の1つがより適切です-私見はまだ両方を示し、両方のタイプのソリューションを受け入れることをお勧めします。

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