この項目では、計算量について説明しています。その他の用法については「NP (曖昧さ回避) 」をご覧ください。
計算複雑性理論 における NP (英 : Non-deterministic Polynomial time )は、複雑性クラス のひとつであり、答えがyesとなるような問いに対して、多項式時間で検証できる証拠が存在する決定問題のクラスである。
定義 NP は、NTIME を使って次のように定義される[1] 。
NP = ⋃ k ∈ N NTIME ( n k ) {\displaystyle {\textsf {NP}}=\bigcup _{k\in \mathbb {N} }{\textsf {NTIME}}(n^{k})} つまり、非決定性チューリングマシン によって多項式時間 で解ける決定問題 のクラスであり、名称も 英 : Non-deterministic Polynomial time (非決定性多項式時間)の略である。また、多項式時間検証可能という同値 な定義もある。言語 L {\displaystyle L} が NP に属するとは、多項式時間決定性チューリングマシン M {\displaystyle M} と多項式 p {\displaystyle p} が存在し、次の性質を満たすことを言う。
x ∈ L {\displaystyle x\in L} ならば、ある証拠 w ∈ { 0 , 1 } p ( | x | ) {\displaystyle w\in \{0,1\}^{p(|x|)}} が存在し、 M ( x , w ) = 1 {\displaystyle M(x,w)=1} x ∉ L {\displaystyle x\not \in L} ならば、どんな証拠 w ∈ { 0 , 1 } p ( | x | ) {\displaystyle w\in \{0,1\}^{p(|x|)}} でも、 M ( x , w ) = 0 {\displaystyle M(x,w)=0} 例 ハミルトン閉路問題 は、「与えられたグラフについて、全ての頂点を一度だけ通る閉路(ハミルトン閉路)が存在するか」という問題である。そのような閉路が与えられれば、yesであること(つまり、「本当に全ての点を一度ずつ通っているか」)は多項式時間で検証できるから、これが証拠と言えるため、ハミルトン閉路問題は NP に属する。証拠を具体的に求める計算量などを考える必要がなく、ただ「存在すること」が要求されることに注意する。また、noであった場合は、どんな証拠であっても検証時に間違ってハミルトン閉路であるとはならないことも重要である。
合成数判定問題は因数が証拠となるため、NP に属することがすぐさま分かるが、その補問題の素数判定問題ではそのような直感的で分かりやすい証拠が知られていない。整数論 によれば、 p − 1 {\displaystyle p-1} の完全な素因数分解と原始根が与えられれば、奇数 p {\displaystyle p} が素数であることを多項式時間で検証できる。ということは、素数であるという証拠は、 p − 1 {\displaystyle p-1} の素因数分解と原始根で足りるかというと厳密にはそうではない。 p − 1 {\displaystyle p-1} の素因数分解が本当にすべて素因数に分解されているか、ということを検証しなければならないからである。幸いにも、再帰的に素数判定の検証を行うことによって、全体として p {\displaystyle p} が素数であることを多項式時間で検証できる。以上より、素数判定問題はNP に属する。合成数判定問題の結果と併せると NP ∩ co-NP {\displaystyle {\textsf {NP}}\cap {\textsf {co-NP}}} に属することが言える。なお、現在では素数判定問題は P に属することが証明されている[2] 。
NP に属するが、 P に属することが証明されていない問題の多くは NP 完全であり、その例は「NP完全問題 」の項に譲る。それ以外の、 P にも NP 完全にも属さない問題の候補としてグラフ同型性判定問題(英語版 ) が挙げられる。
関連する複雑性クラス 多項式階層 多項式階層の包含関係図 P は、決定性チューリングマシンを使って多項式時間で解ける問題のクラスである。定義より明らかに P ⊆ NP {\displaystyle {\textsf {P}}\subseteq {\textsf {NP}}} だが、 P ≠ NP {\displaystyle {\textsf {P}}\neq {\textsf {NP}}} かどうかは未解決問題である(P≠NP予想 )。また co-NP は、 NP の補問題のクラスである。つまり、
co-NP = { L ¯ | L ∈ NP } {\displaystyle {\textsf {co-NP}}=\{{\bar {L}}|L\in {\textsf {NP}}\}} というクラスである。
これらクラスと NP は多項式階層 を構成する。 P = Σ 0 P = Π 0 P {\displaystyle {\textsf {P}}=\Sigma _{0}^{\rm {P}}=\Pi _{0}^{\rm {P}}} とし、適切に定義することによって、
Σ 0 P ⊆ Σ 1 P ⊆ … {\displaystyle \Sigma _{0}^{\rm {P}}\subseteq \Sigma _{1}^{\rm {P}}\subseteq \ldots } Π 0 P ⊆ Π 1 P ⊆ … {\displaystyle \Pi _{0}^{\rm {P}}\subseteq \Pi _{1}^{\rm {P}}\subseteq \ldots } という階層を成し、全クラスの和集合を PH とする。このとき、 NP = Σ 1 P {\displaystyle {\textsf {NP}}=\Sigma _{1}^{\rm {P}}} 、 co-NP = Π 1 P {\displaystyle {\textsf {co-NP}}=\Pi _{1}^{\rm {P}}} である。ある k について Σ k P = Σ k + 1 P {\displaystyle \Sigma _{k}^{\rm {P}}=\Sigma _{k+1}^{\rm {P}}} すなわち Σ k P = Π k P {\displaystyle \Sigma _{k}^{\rm {P}}=\Pi _{k}^{\rm {P}}} となることを「多項式階層が第 k 層で潰れる」と言うが、
もし P = NP {\displaystyle {\textsf {P}}={\textsf {NP}}} なら、階層は完全に潰れ、 NP = co-NP = PH {\displaystyle {\textsf {NP}}={\textsf {co-NP}}={\textsf {PH}}} 。 もし NP = co-NP {\displaystyle {\textsf {NP}}={\textsf {co-NP}}} なら、階層が第1層で潰れ、 NP = PH {\displaystyle {\textsf {NP}}={\textsf {PH}}} 。 つまりP≠NP予想は、多項式階層で考えると「完全には潰れない」という予想に換言できる。多項式階層は、すべての階層で潰れないと考えられているが、未解決問題である。
NP完全およびNP困難 NP完全 とNP困難 は、NP の完全問題と困難問題のクラスである。直感的には、NPに属する任意の問題と少なくとも同じくらい難しい問題をNP困難 であるといい、そのうちNPに属するものをNP完全問題という。これらの概念は正確には多項式時間帰着 を使って定義する。充足可能性問題 がNP 完全に属することが知られている(クック–レビンの定理(英語版 ) )。NP 完全問題の1つでも P に属することが証明できれば P =NP と言えるが、そのような問題は見つかっていない。
NEXPTIMEとEXPSPACE NEXPTIME は、非決定性チューリングマシンを使って指数時間で解ける問題のクラスであり、時間階層定理(英語版 ) より NP ⊊ NEXPTIME {\displaystyle {\textsf {NP}}\subsetneq {\textsf {NEXPTIME}}} が言える。また、EXPSPACE は、決定性チューリングマシンの指数サイズの領域を使って解ける問題のクラスであり、領域階層定理(英語版 ) より NP ⊊ EXPSPACE {\displaystyle {\textsf {NP}}\subsetneq {\textsf {EXPSPACE}}} が言える。
対話証明系 多項式時間検証可能という側面から NP を考えると、対話証明とみなすこともできる。AM は(P を BPP に拡張したように) NP から確率的な挙動を許すようにしたクラスである。PCP定理(英語版 ) は、 NP = PCP ( O ( log n ) , O ( 1 ) ) {\displaystyle {\textsf {NP}}={\textsf {PCP}}(O(\log n),O(1))} を示している。
関連項目 外部リンク 参考文献 実用的な時間で解けるクラス 実用的な時間で解けないと疑われているクラス 実用的な時間では解けないクラス クラス階層 クラスの族 一覧・ カテゴリ