下限を証明することは本当に可能ですか?


24

計算上の問題がある場合、そのような計算の下限を見つけるタスクは本当に可能ですか?私はそれが単一の計算ステップがどのように定義され、どのモデルが証明に使用されるかを要約すると思いますが、それを考えると、実際に一般的に下限を証明しますか?私が意味することは、私たちは「問題のように何かを証明することができるであるより速く解くことができないではなく、」問題のある時間「で解決することができる時間またはより高速な」?Xt(X)Xt(X)

特に下限とその証拠に関する情報を見つけようとしましたが、興味のあるもの、主題に関する書籍/論文/ウェブサイトに関する推奨事項を実際に見つけることができませんか?

回答:


19

そのようなことは絶対に証明できます。

多くの問題には、数値のセットの最小値(ソート/構造化されていない)を見つけるのに少なくとも時間かかるなど、些細な下限があります。この証明は簡単です。o(n)時間で実行される仮想アルゴリズムでは、入力内のすべての数値を調べることはできません。そのため、ある入力でアルゴリズムを実行した場合、入力の特定の要素を調べたことがないことがわかります。その要素を最小限に変更すると、アルゴリズムが失敗する可能性があります。nΩ(n)o(n)

それほど自明ではない下限は、比較ベースのモデルでの並べ替えの下限です。その証明は、次の行に沿って行われます:数値を入力すると、可能な出力(入力はソートされたリストの順列である可能性があるため、出力は入力の順列である可能性があります)。我々は唯一の比較を行うに限定されている場合は、(平均で)私たちのアルゴリズムは、少なくとも実行する必要がある与えることができるようにするために比較は異なる出力。Ω(nlogn)nn!log2(n!)=Ω(nlogn)n!

下限はさらに強くなる可能性があります。指数関数的な下限があるいくつかの問題(特に -hard問題)があります。このクラスの問題には、(一般化された)チェス、チェッカー、ゴーなどのゲームの最適な戦略の計算が含まれます。これの証明は、次のように述べる時間階層定理によるものです(にいくつかの制限があります)。EXPTIMEf

関数与えられた場合、時間O f n で解くことができるが、時間o f n fO(f(n))o(f(n)logn)

したがって、基本的に、関数について考えることができる場合、解決するのに多くの時間を必要とする問題が存在します。f

最後に、必ずしも時間の下限を証明するわけではなく、さらに強力なものが、問題の決定不能性を示しています(たとえば、停止、通信後)。


入力または出力のサイズは、最も一般的な下限です。
ラファエル

14

はい、可能です。典型的な例は、比較ベースのソートアルゴリズムでは、長さnのリストをソートするために比較が必要であるという事実です。Ω(nlogn)n

ただし、下限は上限よりも証明がはるかに難しいようです。比較を必要とするソートアルゴリズムがあることを証明するには、そのようなアルゴリズムを提示するだけです(マージソート– 出来上がり!)。ただし、下限については、何らかの方法で特定のクラスのアルゴリズムが問題を解決できないことを示す必要があります。それを行うことの難しさは、我々は唯一のことを知っているという事実によって説明される LN LPN PP S P A C EO(nlogn) 我々はこれらの介在物の少なくとも一方が(厳密であることを知っているにもかかわらず、 LP S P A C Eスペース階層定理による)は、ほとんどの人は、彼らがいると思うすべての厳格な。

LNLPNPPSPACE,
LPSPACE

一方、Ryan WilliamsにはCircuits for AlgorithmsおよびCircuits for Algorithmsと呼ばれる素敵な論文(そして、何度か聞いたことがあります)があり、彼は下限を見つけることとアルゴリズムを見つけることは基本的にすべてではないと主張していますその違い。たとえば、彼は、下限(決定不能性)を正確に証明するために正確に使用されるアルゴリズム(汎用チューリングマシン)の例として、停止問題の決定不能性の証明を引用します。


「特定のクラスのアルゴリズムはあなたの問題を解決できないことを何らかの形で示す必要があります。」、これは私が本当に直感的に見ることができないので少し混乱している部分ですそのようなこと、少なくとも一般的に。@Tom van der Zandenが私が理解している最小値の発見について述べたように、そのアプローチは一般的ですか?証明を構築するときにそのような議論をするという一般的な意味ですか?リンクもありがとう。
hsalin

1
@ user1288420あなたは一人ではありません。特定のクラスのアルゴリズムが問題を解決できないことを証明する方法を直感的に見ることができれば、より多くの下限の結果が得られます!通常、クラス内のすべてのアルゴリズムが持ついくつかのプロパティを考え出し、そのプロパティが何らかの問題の解決を妨げることを示す必要があります。たとえば、準線形時間で動作するすべてのチューリングマシンには、入力のすべてを読み取ることさえできないという特性があります。つまり、ほとんどの問題を解決できないということです。それは簡単です。残念ながら、より興味深いケースは信じられないほど難しいようです。
デビッドリチャービー

3

n

ただし、下限(または一般に複雑度の上限)に関して、さらにいくつかの注意を喚起するという質問のポイントがあります。

実際には、計算ステップが一定の上限(および下限)を持っていると見なすことができる限り、単一の計算ステップを選択することは無関係です。複雑さの結果は、定数まで定義されるため、同じになります。3つの比較を単位操作として、または1つだけを比較しても違いはありません。

計算のコストを評価するための参照として機能するデータのサイズに関しても同じことが言えます。単一の整数、またはサイズの単位として2つの整数を使用しても違いはありません。

ただし、2つの選択肢は関連している必要があります。

nlognO(logn)

オペレーションがユニットコストを持つと見なすことができるかどうかは、どのデータがユニットサイズを持つと見なすことができるかに密接に関連しています。そして、それはあなたの計算モデルのために選択する抽象化のレベルに依存します。


文字列内のパターンのすべての出現を見つけるには、文字列全体を読む必要があります。パターンが「a」の場合、文字列のすべての文字をチェックせずにすべての出現を見つけることはできません。
デビッドリチャービー

1
@DavidRicherby実際には必ずしもそうとは限りません。Boyer-Mooreアルゴリズムは、パターンの最後から開始するため、文字列内でジャンプアップします。試行された一致が失敗した場合、文字列の先頭を読み取る必要はありません。また、Knuth-Morris-Prattアルゴリズムと同様の最適化が行われ、パターンの構造が原因で失敗する可能性のある試行をスキップします。もちろん、文字列全体を読み取る必要があるパターンもあります。
babou

@DavidRicherbyなぜ聞いたのですか、知っていましたか?
babou

2番目のコメントがわかりません。元の回答に誤った主張が含まれていました。もちろん、それが間違っていることは知っていました。それが私がそれを指摘することができた方法です!他の人は、それが間違っていることを知らなかったかもしれません。
デビッドリチャービー

1
@DavidRicherby私のポイントは、あなたが私が言っていることを理解したということです。私が言っているはずではないかもしれなく、しません。これは、読者に私がナンセンスだと思わせるようなコメントスタイルを要求しませんでした。その間、まったく同じ不注意なミスを犯しました。「文字列内のパターンのすべての出現を見つけるには、文字列全体を読む必要がある」と述べることによって、文字列内のパターンのすべての出現を見つけるに、文字列全体を読み取ります。前の例を緩和するために、入力の読み取りが常に必要であるとは限らないことを述べることのみを意図しました。
babou
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.