上限と下限の「正しい」定義とは何ですか?


19

してみましょうf(n)サイズの入力に問題の時間を実行している最悪のケースであるn。私たちは固定してビット奇妙な問題を作ろうf(n)=n2のためn=2kが、f(n)=nのためn=2k+1

  1. それでは、問題の下限は何ですか?私が理解した方法は、下限にすぎませんf(n)。しかし、は、すべてのn > n 0f n > k n 2 に対してf(n)=Ω(n2)定数kが存在することを意味し、これは真実ではないことを知っています。したがって、f n = Ω n としか言えないようですn0n>n0f(n)>kn2f(n)=Ω(n)。しかし、通常、問題の下限はΩ(n2)であると呼びますか?

  2. と仮定すると、すべてのn > n 0g n > k n 2 に対してg(n)=Ω(n2)定数kが存在することを意味します。また、問題に実行時間g n があると仮定しましょう。すべての素数nについてこの問題を別の問題(同じ入力サイズ)に減らすことができる場合、他の問題の実行時間の下限はΩ nn0n>n0g(n)>kn2g(n)nΩ(n2)


12
これが、数学者がlim supとlim infを使用する理由です。
ピーターショー

1
だから私は違いを理解していると思う。投稿者はオメガを無限に頻繁に理解していると思います。しかし、明示的に区別したい場合、拡張する以外に使用できる表記はありますか?
Yu裕

3
lim supg(n)n2k
kg(n)kn2
lim infg(n)n2k
g(n)kn2n
 

12
@Wei:ほとんどの複雑性理論家(以下のランスを参照)にとって、関数はθ(n ^ 2)です。ほとんどのアルゴリズム主義者(KnuthまたはCLRSを参照)にとって、関数はΟ(n ^ 2)およびΩ(n)です。両方の表記は、それらのサブコミュニティではほぼ標準ですが、完全ではありません。さらに悪いことに、これら2つのサブコミュニティは大きく重なり合っています!したがって、使用する表記法が重要な場合は、使用している表記法を明示的に指定する必要あります。(幸いなことに、それはめったに重要ではありません。)
ジェフ

2
@ジェフ。コメントを回答として投稿してください。
-chazisop

回答:


13

の正しい定義は、無限に多くのについてようなが存在するということです。下限の無限の定義は問題を処理し、実際にそれを使用する方法です。f(n)=Ω(n2)k>0nf(n)kn2

私がやった後の 2005年に、この裏には。

一部の教科書はこの定義を正しくしていますが、そうでないものもあります。


14
Knuthはあなたに同意しません:portal.acm.org/citation.cfm
id=

4
CLRSとウィキペディアもあなたに同意しません。無限の定義は注目に値する代替手段ですが、あまり広く使用されていないようです。
匿名

例外のセットが指標0のとき、私はこれらの定義は、すべての同意を考える
カーターTazio Schonwaldの

2
「無限に頻繁に」定義の問題は、通常、「無限に頻繁にはない」定義を除外しないことです。私たちは、恐ろしい結果、この定義で持っているので、が、また、、及び、一部では厳しい注文であることを意味しているのセンス。私はこれが本当に嫌いです。少なくとも@Carterのメジャー0例外の提案は少し恐ろしいものではありませんが、通常の順序よりも細かい順序を許可しています。f(n)=Ω(n2) f(n)=o(n+1)Ωo
アンドラスサラモン

2
@Jukka:いいえ、私は悪用てるここに。あなたが示唆しているように、代わりにを使用するように引数を修正する必要があります。したがって、またはを使用せずに実際の異議を申し上げます。「無限に頻繁に」では、、、さらにという異常があります。そのため、は予約注文も行いません。oOooOn=Ω(f(n))f(n)=Ω(n2)nΩ(n2)Ω
アンドラスサラモン

4

クヌースの定義あなただけ主張することができます。ご覧のとおり、これは直感的ではなく、VitányiとMeertensが「wild」と呼ぶ関数で発生します。彼らは定義することを提案するf(n)Ω(n)

Ω(f(n))={gδ>0:n0>0:n>n0:g(n)δf(n)}.

(これはランスの定義と同じです。)この定義では、です。f(n)Ω(n2)


2

私は最も広く使用されているものについては知りませんが、最も古い使用法を知っていると思います(とにかくコンピューターサイエンスのために)。

Hartmanis&Stearnsによる1965年の論文「アルゴリズムの計算の複雑さ」では、Corollary 2.1は次のとおりです。

とがような時間関数である場合、UTinfnT(n)U(n)0SUST

ここで、は計算可能なすべての問題の複雑度クラスです。T(n)は、整数およびすべてのおよびに従う必要がありますが、時間構成可能である必要はありません。SKO(K(n))T(n)n/kknT(n)T(n+1)

関数は、最初の規則に従いますが、2番目の規則に従うことに失敗します。k=1

系2.2は上記の逆であり、極限を使用しますが、それでもこれらの要件があります。アルゴリズムが年々複雑になったため、要件が緩和された可能性があります。


2

次の2つのことを区別する必要があると思います。

  • 関数の下限
  • 問題の下限(アルゴリズム)

関数の場合、順序を修正すると、下限/上限の定義がそれに続きます。順序関係が漸近的である場合majorization(定数因子を無視します)

fg:c,nm>n. f(x)cg(x)

その定義はと通常の定義です。両方とも組み合わせ論のような他の分野で広く使われています。OΩ

しかし、問題(アルゴリズム)の下限について話すとき、私たちが本当に言いたいのは、問題が(問題を解決するアルゴリズムを実行するために)ある程度のリソースを必要とすることです。多くの場合、複雑度クラスはような関数によってパラメーター化され、問題は関数の下限であると簡単に言いますが、これは素晴らしい関数(アルゴリズムの実行時間など)でのみ機能しますモノトーンなど)。これらの場合に言いたいのは、問題を解決するために実行時間が必要なことです。つまり、未満の実行時間では不十分です。これは、アルゴリズムの実行時間が。Time(t(n))n2n2o(t(n))

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