決定するチューリングマシンによって定義された言語Lが与えられた場合、LがNPにあるかどうかをアルゴリズムで決定することは可能ですか?
決定するチューリングマシンによって定義された言語Lが与えられた場合、LがNPにあるかどうかをアルゴリズムで決定することは可能ですか?
回答:
いいえ。まず、ライスの定理により、これはTMの特性であり、TMが計算する言語にのみ依存するため、計算することはできません。
しかし、それ以上に、のインデックス集合することが知られている(、で計算言語そのTMの組であるN Pが)であるΣ 0 3 -complete(Σ 0 3における算術計算可能の階層ではありません多項式階層)。
このような質問は最初にHajekによって調査されました。詳細については、Ken Reganによるこの記事などを参照してください。
Hajekの論文からさらにいくつかの素晴らしいナゲット:
Joshua Grochowが指摘したように、あなたの文字通りの質問に対する答えはノーです。
ただし、Holgerが述べたように、非決定的チューリングマシン(NTM)が一定のkに対してn ^ kステップ後に「クロック」し、停止するかどうかを線形時間でチェックすることができます。以下のコード)。多くの場合、NTMが多項式時間であるかどうかを判断することが可能であると論文または本が(誤って)示唆する場合、これが実際に意味するものです。おそらくこれがあなたが質問をした理由ですか?(複雑性理論を最初に学んだときに同じ質問があり、TMがポリタイムであるかどうかを確認することができるという声明をどこかで見ました。)本当の質問は、なぜこれをしたいのかということです。どのように。
このようなクロック機能を追加する方法はたくさんあります。たとえば、長さnの入力xで、「プライマリアルゴリズム」の1つのステートメントを交互に実行し、次にn ^ kステップで終了する次のアルゴリズムの1つのステートメントを交互に実行するとします。
i_1 = 1からn i_2 = 1〜n ... i_k = 1からn ノーオペレーション; 戻り;
プライマリアルゴリズムが停止する前に上記のコードが返された場合、計算全体を停止します(拒否など)。
NTMがこの形式であるかどうかを決定するアルゴリズムは、その入力がポリタイムNTMであるかどうかを決定するアルゴリズムの試みとして解釈される場合、いくつかの偽陰性を報告します:一部のNTMは、多項式時間で停止することが保証されています上記のコードのように、アルゴリズムの1つのステートメントをクロックの1つのステートメントと交互に実行することはありません(したがって、ポリタイムであるにもかかわらず拒否されます)。
しかし、誤検知はありません。NTMがテストに合格すると、多項式時間で確実に停止するため、NP言語が定義されます。ただし、おそらく、プライマリアルゴリズムが停止する前にクロックがなくなると、基礎となるプライマリアルゴリズムの動作が変更され、終了するのに十分な時間が与えられた場合にプライマリアルゴリズムが受け入れられたとしても、計算が拒否されます。したがって、決定された言語は、プライマリアルゴリズムの言語と異なる場合があります。 だが、これが重要です。実行されるプライマリアルゴリズムが実際に時間p(n)で実行される多項式時間アルゴリズムであり、クロックの定数kがn ^ k> p(n)の大きさである場合、プライマリアルゴリズムは、クロックが切れる前に常に停止します。この場合、プライマリアルゴリズムの答えは変更されないため、プライマリアルゴリズムとそれをシミュレートするクロック付きNTMが同じNP言語を決定します。
何でこれが大切ですか?これは、「すべてのNP言語を列挙する」ことができることを意味します(私が言ったように、「特定のNTMがポリタイムかどうかを決定する」または「すべてのポリタイムNTMを列挙する」と不正確に記述されることがよくあります)。より正確には、NTMのM_1 M_2の無限リストを列挙することができます...
発生しないのは、すべての多項式時間NTMがリストにあるということです。しかし、各NP言語には、それを表すNTMが無限にあります。したがって、各NP言語は、その代表的なNTMの少なくとも一部、特にn ^ kがM_kの実行時間を超える十分に大きなインデックスkにあるすべてのNTMをリストに持つことが保証されます。
これは、すべてのNP言語のそのような無限(または無制限)のリストをアルゴリズムで列挙する必要がある対角化のようなトリックを行うのに役立ちます。そしてもちろん、この議論全体は、ポリタイム決定論的TMなどのポリタイムNTM以外の多くの種類のマシンにも当てはまります。