web-dev-qa-db-ja.com

P vs NP vs NP Complete vs NP Hard

私はこれらの分類とそれらが存在する理由を理解しようとしています。私の理解は正しいですか?そうでない場合、何ですか?

  1. Pは多項式の複雑度、またはO(nk)などの負でない実数kの場合はO(1), O(n1/2), O(n2), O(n3)です。問題がPに属する場合、多項式時間でゼロからそれを解決できる少なくとも1つのアルゴリズム。たとえば、nkを除算するかどうかを2 <= k <= sqrt(n)でループし、各ステップでチェックすることで、整数nが素数であるかどうかを常に把握できます。

  2. NPは非決定論的な多項式の複雑さです。非決定的であることの意味が本当にわかりません。多項式時間で検証するのは簡単だと思いますが、答えがわからなければ、最初から多項式時間で解決できる場合とそうでない場合があります。 may多項式時間で解けるので、すべてのP問題もNP問題です。整数分解はNPの例として引用されていますが、なぜだかわかりません試行分解はO(sqrt(n))時間かかるため、個人的にはPではありません。

  3. NP-Completeわかりませんが、この例としてTravelling Salesman Problemが引用されています。しかし、私の意見では、TSPの問題はNPである可能性があります。これは、前もってパスが与えられているかどうかを確認するためにO(2n n2) time to solve, but O(n)のようなものを必要とするためです。

  4. NP-ハードは未知数でいっぱいだと思います。検証、解決が難しい。

48
Nakano

あなたは基本的にPとNPについては正しいですが、NP-hardとNP-completeについては正しくありません。

まず、問題となっている4つの複雑度クラスの非常に簡潔な定義を次に示します。

  • Pは、決定論的チューリングマシンによって多項式時間で解くことができる決定問題のクラスです。

  • NPは、非決定性チューリングマシンによって多項式時間で解くことができる決定問題のクラスです。同様に、決定論的チューリングマシンによって多項式時間で検証できる問題のクラスです。

  • NP-hardは、決定論的チューリングマシンによってNPのすべての問題を多項式時間で削減できる決定問題のクラスです。

  • NP-completeは、NP-hardとNPの共通部分です。同様に、NP-completeはNPの決定問題のクラスであり、NPの他のすべての問題は、決定論的チューリングマシンによって多項式時間に削減できます。 。

そして、これがオイラー線図です Wikipediaから これらの4つのクラス間の関係を示しています(PがNPに等しくないと仮定します):

enter image description here

あなたが最も馴染みがないか混乱していると私が思う部分は、問題Xから問題Yへの「多項式時間の短縮」の概念です。XからYへの短縮は、いくつかを利用してXを解く単純なアルゴリズムAです問題Yを解決する他のアルゴリズムB。B以外のAのすべての部分が多項式時間の複雑さを持っている場合、この削減は「多項式時間削減」と呼ばれます。簡単な例として、配列内で最小の要素を見つけるという問題は、配列を並べ替えてから、並べ替えられた配列の最初の要素を返すことができるため、並べ替えの問題を一定時間で解決できます。

NPハード定義について見落としがちなことの1つは、削減がNP問題からNPハード問題にになるが、必ずしもその逆ではないことです。これは、NP困難な問題がNPにあるか、はるかに複雑なクラス(オイラーダイアグラムからわかるように)にあるか、決定可能な問題ではない可能性があることを意味します。非公式にこのことを説明しようとすると、「NP-hardは少なくともNPと同じくらい難しい」を意味します。

Wikipediaの説明 :停止問題は、明らかにNPにはないNPハード問題の良い例です。

停止の問題がNP困難であるがNP完全ではないことを証明するのは簡単です。たとえば、ブールの充足可能性の問題は、すべての真理値の割り当てを試行するチューリングマシンの説明に変換し、式を満たすものが見つかると停止し、それ以外の場合は無限ループに入ります。 NPのすべての問題は有限数の演算で決定可能であるので、停止の問題はNPは、一般的に決定不可能です。

52
Ixrec

整数分解はNPの例として引用されますが、試行分解はO(sqrt(n))時間かかるため、私はなぜそれがPではないのか理解できません。

複雑さのクラスのために、nは入力の長さです。整数kを因数分解したい場合、nkではなく_log k_、数値を書き留めるために必要なビット数(または何でも) 。整数分解はあなたが言うようにO(sqrt(k))ですが、これはO(sqrt(2n))、つまりO(2(n/2))です。

NP-ハードは未知数でいっぱいだと思います。検証、解決が難しい。

いいえ。NP-Hardは、問題を解決するのがどれほど難しいかについてだけです。

NP困難な問題は、NPで最も困難な問題として少なくとも困難です。 NP-Hard問題の多項式時間アルゴリズムがあった場合、そのアルゴリズムをNPのあらゆる問題に適合させることができるので、私たちはそれらが少なくとも難しいことを知っています。

NP-Completeわからない

NP-Completeは、問題がNPとNP-Hardの両方であることを意味します。これは、ソリューションをすばやく検証できる(NP)ことを意味しますが、少なくともNP(NP-Hard)の最も難しい問題と同じくらい難しいものです。

非決定的であることの意味が本当にわかりません。

非決定論はNPの代替定義です。非決定的チューリングマシンは、事実上、いつでも自分自身を複製し、複製ごとに異なる実行パスをとることができます。この定義では、NPは、コンピュータによって多項式時間で解くことができる一連の問題であり、自由に複製できます。これは、多項式時間で検証できる問題とまったく同じです。

9
Winston Ewert

最初に理解することは P そして NP 問題ではなく、言語を分類します。これが何を意味するのかを理解するには、まず他の定義が必要です。

alphabetは、空でない有限のシンボルのセットです。

{_0_、_1_}は、ASCII文字セットと同様にアルファベットです。{}は空なのでアルファベットではありません。 N (整数)は有限ではないため、アルファベットではありません。

みましょう Σ アルファベットになります。有限数のシンボルの順序付けられた連結 Σ Wordと呼ばれる Σ

文字列_101_は、アルファベット{_0_、_1_}の上の単語です。 空の単語(多くの場合、 ε)は、アルファベットを超える単語です。文字列penguinは、ASCII文字を含むアルファベット上の単語です。数字πの10進表記は、アルファベット上の単語ではありません{_._、_0_、_1_、_2_、_3_、_4_、_5_、_6_、_7_、_8_、_9_}有限ではないため。

Wordの長さ ww|は、その中のシンボルの数です。

たとえば、| hello | = 5および|ε| =0。すべての単語 w、|w| ∈ N したがって、有限です。

みましょう Σ アルファベットになります。セット Σ すべての単語が含まれています Σを含む ε。セット Σ+ すべての単語が含まれています Σ、除く ε。ために  ∈ N、 Σ 長さの単語のセットです 

すべてのアルファベット Σ、 Σ そして Σ+ 無限です 可算セット 。 ASCII文字セットの場合 ΣASCII、正規表現_.*_および_.+_は、 ΣASCII そして ΣASCII+ それぞれ。

{_0_、_1_}7 7ビットのセットですASCIIコード{_0000000_、_0000001_、…、_1111111_}。{_0_、_1_}32 32ビット整数値のセットです。

みましょう Σ アルファベットであることと L ⊆ Σ。 L languageと呼ばれる Σ

アルファベットの場合 Σ、空のセットと Σ ささいな言語です Σ。前者はしばしば空の言語と呼ばれます。空の言語{}および空の単語のみを含む言語{ε} 異なっています。

{_0_、_1_}のサブセット32 非NaN IEEE 754浮動小数点値に対応するのは有限言語です。

言語は無数の単語を持つことができますが、すべての言語は数えられます。整数を10進表記で表す文字列のセット{_1_、_2_、…}は、アルファベット{_0_、_1_、_2_に対する無限言語です。 、_3_、_4_、_5_、_6_、_7_、_8_、_9_}。 10進数の素数を表す文字列の無限セット{_2_、_3_、_5_、_7_、_11_、_13_、…})表記はその適切なサブセットです。正規表現[+-]?\d+\.\d*([eE][+-]?\d+)?に一致するすべての単語を含む言語は、ASCII文字セット(Cプログラミングで定義されている有効な浮動小数点式のサブセットを表す)を超える言語です。言語)。

実数のセットは数えられないので、すべての実数を(どんな表記でも)含む言語はありません。

みましょう Σ アルファベットであることと L ⊆ Σ。機械 D decides L すべての入力の場合 w ∈ Σ 特性関数を計算します χLw)有限時間内。特性関数は次のように定義されます

χL: Σ →{0、1} 
 w  ↦1、 w ∈ L
 0、それ以外の場合。

このようなマシンはdeciderと呼ばれ、 L。私たちは書く "Dw)= バツ」の意味 w、 D 出力 バツ」。

多くの機械モデルがあります。今日実際に使用されている最も一般的なものは Turing machine のモデルです。チューリングマシンには、セルにクラスター化された無制限の線形ストレージがあります。各セルは、いつでも1つのアルファベットの記号を1つだけ保持できます。チューリングマシンは、一連の計算ステップとして計算を実行します。各ステップでは、1つのセルを読み取り、その値を上書きして、読み取り/書き込みヘッドを1つ左または右のセルに移動できます。マシンが実行するアクションは、有限状態オートマトンによって制御されます。

命令の有限セットと無制限のストレージを備えたランダムアクセスマシンは、チューリングマシンモデルと同じくらい強力な別のマシンモデルです。

この説明のために、使用する正確なマシンモデルに煩わされることはありませんが、マシンには有限の決定論的制御ユニット、無制限のストレージがあり、計算を一連のステップとしてカウントして実行できると言えば十分です。

質問で使用したことがあるので、既に “ big-O”表記 に慣れていると思いますので、ここでは簡単に復習します。

みましょう f: N →関数であること。セット Of)すべての機能を含む g: N → N 定数が存在する  ∈ N そして c ∈ N そのように  ∈ N と  >  それは真実だ g)≤ cf)。

これで、本当の問題に取り組む準備が整いました。

クラス P すべての言語が含まれています L チューリングマシンが存在する D それが決める L そして定数 k ∈ N すべての入力に対して w、 D せいぜい停止 T(|w|)関数の手順 T ∈ O ↦ k)。

以来 O ↦ k)数学的には正しいですが、書き込みや読み取りには不便ですが、ほとんどの人は–正直に言うと、自分以外の全員–通常は簡単に書き込みます Ok)。

範囲は長さに依存することに注意してください w。したがって、素数の言語に対して行う引数は、 naray encodings の数値に対してのみ正しいです。 w 数の 、エンコードの長さ|w|に比例する 。実際にそのようなエンコーディングを使用する人はいないでしょう。考えられるすべての要因を単純に試すよりも高度なアルゴリズムを使用すると、素数の言語が P 入力がバイナリ(またはその他のベース)でエンコードされている場合。 (大きな関心にもかかわらず、これは Manindra Agrawal、Neeraj Kayal、およびNitin Saxena によってのみ証明され、2004年の受賞歴のある論文でアルゴリズムが非常に単純ではないと推測できます。)

簡単な言語{}と Σ と重要な言語{ε}は明らかに P (任意のアルファベット Σ)。文字列を入力として受け取り、文字列がこれらの言語ごとのWordかどうかを示すブール値を返す関数をお気に入りのプログラミング言語で記述し、関数に多項式の実行時の複雑さがあることを証明できますか?

すべてのregular言語(正規表現で記述された言語)は P

みましょう Σ アルファベットであることと L ⊆ Σ。機械 V 2ワードのエンコードされたタプルを取ります w、 c ∈ Σ 有限数のステップがverifierの後に0または1を出力します L 次のプロパティがある場合。

  • 与えられた(w、 c)、 V 次の場合にのみ1を出力します w ∈ L
  • すべてのための w ∈ L、存在します c ∈ Σ そのような Vw、 c)= 1。

の c 上記の定義では、witness(またはcertificate)と呼ばれています。

検証者は、誤った証人に対して偽陰性を与えることが許可されています w 実際に L。ただし、誤検知を許可することはできません。言語の各単語に対して、少なくとも1人の目撃者が存在することも必要です。

素数ではないすべての整数の10進エンコードを含む言語COMPOSITEの場合、素数では、証人は因数分解である可能性があります。たとえば、_(659, 709)_は_467231_∈COMPOSITEの証人です。証人がいなくても、紙の上で467231が素数ではないことを証明することは、コンピューターを使用しないと難しいことを簡単に確認できます。

適切な証人を見つける方法については何も言わなかった。これは非決定的な部分です。

クラス NP すべての言語が含まれています L チューリングマシンが存在する V 検証する L そして定数 k ∈ N すべての入力に対して(w、 c)、 V せいぜい停止 T(|w|)関数の手順 T ∈ O ↦ k)。

上記の定義は、 w ∈ L 目撃者がいます c と|c| ≤ T(|w|)。 (チューリング機械は証人のより多くのシンボルを見ることはできません。)

NP のスーパーセットです P (なぜ?)。ある言語が存在するかどうかは不明です NP しかしではない P

整数分解はそれ自体が言語ではありません。ただし、それに関連する決定問題を表す言語を構築できます。つまり、すべてのタプルを含む言語(、 メートル) そのような  要因があります d と d ≤ メートル。この言語をFACTORと呼びます。 FACTORを決定するアルゴリズムがある場合、それを使用して、各素因数に対して再帰的バイナリ検索を実行することにより、多項式オーバーヘッドのみで完全な因数分解を計算できます。

FACTORが入っていることを示すのは簡単です NP。適切な目撃者は単に要因です d それ自体と検証者がしなければならないことはすべて、 d ≤ メートル そして  モッド d =0。これはすべて多項式時間で実行できます。 (繰り返しますが、カウントするのはエンコードの長さであり、それはlogarithmic 。)

FACTORも含まれていることを示すことができる場合 P、あなたは多くのクールな賞を確実に得ることができます。 (そして、あなたは今日の暗号のかなりの部分を破りました。)

すべての言語で NP、決定論的にそれを決定するブルートフォースアルゴリズムがあります。それは単にすべての目撃者に対して徹底的な検索を実行します。 (証人の最大長は多項式によって制限されることに注意してください。)したがって、PRIMESを決定するアルゴリズムは、実際にはCOMPOSITEを決定するブルートフォースアルゴリズムでした。

最後の質問に対処するには、reductionを導入する必要があります。削減は、理論的なコンピューターサイエンスの非常に強力な概念です。ある問題を別の問題に縮小するということは、基本的に、ある問題を別の問題を解決することによって解決することを意味します。

みましょう Σ アルファベットであることと  そして B 言語を超えて Σ。  多項式時間多元削減可能 B 関数が存在する場合 f: Σ → Σ 次のプロパティがあります。

  • w ∈  ⇔ fw)∈ B すべてのために w ∈ Σ
  • 関数 f すべての入力に対してチューリングマシンで計算できます w |の多項式で囲まれたいくつかのステップw|。

この場合は、  ≤pB

たとえば、  三角形を含むすべてのグラフ(隣接行列としてエンコード)を含む言語です。 (三角形は長さ3のサイクルです。)さらにみましょう B ゼロ以外のトレースを持つすべての行列を含む言語であること。 (行列のトレースは、その主要な対角要素の合計です。)次に、  多項式時間多項式は B。これを証明するには、適切な変換関数を見つける必要があります f。この場合、設定できます f 3を計算するrd 隣接行列のパワー。これには、それぞれ多項式の複雑さを持つ2つの行列-行列積が必要です。

それは当然のことです L ≤pL。 (正式に証明できますか?)

これを適用します NP 今。

言語 L はNP-hardかつその場合のみ L'≤pL すべての言語 L'∈ NP

あ NP-難しい言語が含まれている場合と含まれていない場合があります NP 自体。

言語 L はNP-completeかつその場合のみ

  • L ∈ NP そして
  • L です NP-ハード。

一番有名な NP-完全な言語はSATです。これには、満足できるブール式がすべて含まれています。例えば、 (a ∨ b)∧(¬a ∨¬b)∈SAT。有効な証人は{a = 1、 b = 0}。式 (a ∨ b)∧(¬a ∨ b)∧¬b ∉土。 (どうやってそれを証明しますか?)

SATであることを示すことは難しくありません∈ NP。を表示するには NP-SATの硬さは多少の作業ですが、1971年に Stephen Cook によって作成されました。

あれは NP-完全な言語が知られている、それを示すことは比較的簡単でした NP-縮小による他の言語の完全性。言語なら  知られている NP-ハード、それを示す  ≤pB を示す B です NP-ハードも(「≤p」)。 1972年 Richard Karp が21の言語のリストを公開しました。 NP-SATの(推移的)削減を介して完了します。 (これは、私が実際にお読みになることをお勧めする、この回答の唯一の論文です。他の論文とは異なり、理解することは難しくなく、 NP-削減作業による完全性。)

最後に、短い要約。記号を使用します NPH そして NPC のクラスを示す NP-ハードと NP-完全な言語をそれぞれ。

  • P ⊆ NP
  • NPC ⊂ NP そして NPC ⊂ NPH、実際には NPC = NP ∩ NPH 定義により
  •  ∈ NP)∧(B ∈ NPH)⇒  ≤pB

含まれていることに注意してください NPC ⊂ NP その場合でも適切です P = NP。これを確認するには、自明でない言語を自明な言語に減らすことはできず、自明な言語が P と同様に重要な言語 NP。ただし、これは(あまり面白くない)コーナーケースです。

補遺

混乱の主な原因は、「「」のO ↦ f))」は、アルゴリズムの入力のlengthを実際に参照するときのアルゴリズムの入力の解釈として。これは、アルゴリズムの漸近的な複雑さが入力に使用されるencodingに依存することを意味するため、重要な違いです。

今週、既知の最大の メルセンヌ素数 の新記録が達成されました。現在知られている最大の素数は2です。74 207 281 − 1.この数値は非常に大きいので頭痛がするので、次の例では小さい数値を使用します。231 – 1 = 2 147 483 647.さまざまな方法でエンコードできます。

  • 10進数としてのメルセンヌ指数:_31_(2バイト)
  • 10進数として:_2147483647_(10バイト)
  • 単数として:_11111…11_ここで__は2 147 483 640に置き換えられます_1_ s(ほぼ2 GiB)

これらの文字列はすべて同じ番号をエンコードし、これらのいずれかが与えられれば、同じ番号の他のエンコードを簡単に構築できます。 (必要に応じて、10進数のエンコードを2進数、8進数、または16進数に置き換えることができます。これは、定数係数によって長さのみを変更します。)

素数性をテストするための単純なアルゴリズムは、単項エンコーディングの多項式のみです。 AKS素数検定 は、10進数(または他の任意の底)の多項式です b ≥2)。 Lucas-Lehmer素数性検定 はメルセンヌ素数の最もよく知られたアルゴリズムです Mp と p 奇数の素数ですが、それでもメルセンヌ指数のバイナリエンコーディングの長さは指数関数的です p (多項式 p)。

アルゴリズムの複雑さについて話したい場合は、使用する表現を明確にすることが非常に重要です。一般に、最も効率的なエンコーディングが使用されていると想定できます。つまり、整数のバイナリ。 (すべての素数がメルセンヌ素数であるとは限らないため、メルセンヌ指数を使用することは一般的なコード化スキームではないことに注意してください。)

理論的な暗号化では、多くのアルゴリズムが完全に役に立たない文字列を正式に渡されます k 最初のパラメーターとして_1_ s。アルゴリズムはこのパラメーターを見ることはありませんが、正式には多項式にすることができます kこれは、プロシージャのセキュリティを調整するために使用される security parameter です。

バイナリエンコーディングの決定言語がいくつかの問題の場合 NP-完了、決定言語はもはやありません NP埋め込まれた数値のエンコードが単項に切り替えられた場合は-complete。他の問題の決定言語は残っています NP-それでも完了。後者はと強く呼ばれます NP-コンプリート。最もよく知られている例は bin pack です。

また、入力が圧縮された場合にアルゴリズムの複雑さがどのように変化するかを確認することも(おそらくそれ以上に)興味深いです。メルセンヌ素数の例では、3つのエンコーディングがあり、それぞれが前のエンコーディングよりも対数的に圧縮されています。

1983年、 Hana GalperinとAvi Wigderson は、グラフの入力エンコーディングが対数的に圧縮されている場合の一般的なグラフアルゴリズムの複雑さについて興味深い論文を書きました。これらの入力については、上からの三角形を含むグラフの言語(明らかに P)突然 NP-コンプリート。

そしてそれは言語クラスが P そして NP 問題ではなく、言語に対して定義されています。

8
5gon12eder

同じことについては、非公式の定義を少なくしようと思います。

P問題:多項式時間で解ける問題。効率的に解決できる問題が含まれています。

NP問題:多項式時間で検証できる問題。例:巡回セールスマン、回路設計。 NP問題は(数独のような)パズルのようなものです。問題の正しい解決策があれば、非常に速く解決策をチェックできますが、実際に解決しようとすると、時間がかかる場合があります。

ここで、P vs NPは、実際に解決策を迅速にチェックして正解できる問題があるかどうかを尋ねます。その場合、常にそれを解決するための高速な方法があります。したがって、数学的に書くと、is NP Pのサブセットか?

NP complete:これらは、NP問題の本当に難しい問題です。したがって、より迅速な解決方法がある場合NP完全、次にNP完全がPになり、NP問題がPに崩壊します。

NPハード:多項式時間でさえチェックできない問題はnpハードです。たとえば、チェスで最高の動きを選択することはその1つです。

不明な点がある場合は、次の動画をご覧ください: https://www.youtube.com/watch?v=YX40hbAHx3s

これによりぼやけた輪郭が得られることを願っています。

8
kanishk verma