MathLabs

応用数学と計算数学

計算複雑性理論:PとNP

解くのにかかる時間の増加の仕方で問題を分類し、P=NP かどうかを中心的な問いとする理論。

直観なぜ一部のパズルは確認は簡単でも解くのは難しいのか

数独パズルを一から解くには、可能性を次々と試しながら長い時間がかかることがある。しかし友人が完成したマス目を渡して、それがパズルを解いていると主張するなら、その主張を確認するのは速い:すべての行、列、箱を重複がないか走査するだけでよい。シャッフルされたトランプの束を並べ替えるのはそれとは違う — どんな並べ替え手法でも数回のパスで解くのが速く、確認するのも同じくらい速い。計算複雑性理論は、この日常的な区別 —「解くのが簡単」対 単に「解を確認するのが簡単」— を数学的に厳密にし、その区別が本物なのか幻なのかを問う。

頂点が辺で結ばれたネットワークで、辺の一部がハイライトされ、すべての頂点をちょうど1回ずつ通る単一のサイクルを形成している。
すべての頂点をちょうど1回ずつ訪れるサイクル(ハミルトン閉路)が存在するかを問うグラフである。そのようなサイクルを一から見つけるには、頂点の並べ方を数多く探索する必要があるように見えるが、ハイライトされた候補サイクルは一回の走査で確認できる:連続する各頂点対が実際に辺で結ばれているか、そしてすべての頂点がちょうど1回ずつ現れているかを確かめるだけでよい。

中高実行時間の測定:多項式的増加と指数関数的増加

アルゴリズムの実行時間は通常、入力サイズ nn の関数として、ビッグO記法を用いて測られる:T(n)=O(f(n))T(n) = O(f(n)) とは、nn が十分大きくなると実行時間が f(n)f(n) の定数倍より速く増加しないことを意味する。nn 個の項目からなる未整列のリストを1つずつ探索するには O(n)O(n) ステップかかる。整列済みの nn 個の項目のリストに対する二分探索は O(log⁡n)O(\log n) ステップしかかからない。どちらも nn に関して多項式的(実際には線形以下または線形)である。対照的に、nn 個の項目のすべての部分集合を試すには O(2n)O(2^n) ステップかかる — nn に関して指数関数的であり、nn が数十を超えると桁違いに遅くなる。

入力サイズ nn に応じて異なる増加率がどう変化するか
増加率n=10n=10n=20n=20n=50n=50
O(n)O(n)101020205050
O(n2)O(n^2)1001004004002,5002{,}500
O(2n)O(2^n)1,0241{,}024≈1.05×106\approx 1.05\times 10^6≈1.13×1015\approx 1.13\times 10^{15}

大学クラス P と NP

定義: クラス P

P(多項式時間)とは、標準的なコンピュータが入力サイズ nn に関するある多項式で抑えられた時間 — すなわちある固定定数 kk に対して O(nk)O(n^k) の時間 — で解けるイエス/ノー問題の集合である。ソート、素数判定、グラフの最短経路探索はいずれも P に属する。

定義: クラス NP

NP(非決定性多項式時間)とは、提案された「はい」という答えに、多項式時間で正しさを確認できる証拠(ハミルトン閉路や式を満たす割り当てのような witness)が伴う一方で、一般にそのような証拠を多項式時間で見つける方法は知られていない、そのようなイエス/ノー問題の集合である。P に属するすべての問題は NP にも属する(速く解けるなら、確認も自明に速い)ので P⊆NPP \subseteq NP である。逆の包含が成り立つかどうかが、まさに P 対 NP の問題である。

P=⋃k≥1TIME(nk)P = \bigcup_{k \ge 1} \mathrm{TIME}(n^k)

形式的には、言語 LL が NP に属するとは、ある多項式 pp と多項式時間の検証器 VV が存在して、x∈Lx \in L であることと、∣y∣≤p(∣x∣)|y| \le p(|x|) を満たすある証拠 yy が存在して V(x,y)V(x,y) が受理することが同値であることをいう。この検証器に基づく定義は、より一般的な「非決定性チューリング機械」の定義と同値であり、実際にはこちらの方が推論しやすいことが多い。

x∈L  ⟺  ∃ y, ∣y∣≤p(∣x∣), V(x,y)=acceptx \in L \iff \exists\, y,\ |y| \le p(|x|),\ V(x,y) = \text{accept}

大学多項式時間帰着とNP完全性

定義: 多項式時間帰着

問題 AA が問題 BB に多項式時間で帰着するとは、A≤pBA \le_p B と書き、多項式時間で計算可能な関数 ff が存在して、AA の任意のインスタンス xx を BB のインスタンス f(x)f(x) に変換し、xx が AA の「はい」インスタンスであることと f(x)f(x) が BB の「はい」インスタンスであることが同値であることをいう。直感的には、A≤pBA \le_p B は「BB は少なくとも AA と同じくらい難しい」ことを意味する:BB に対する高速アルゴリズムがあれば、変換してそれを呼び出すことで直ちに AA に対する高速アルゴリズムが得られる。

定義: NP完全

問題 BB がNP完全であるとは、B∈NPB \in NP であり、かつすべての問題 A∈NPA \in NP が A≤pBA \le_p B を満たすことをいう。NP完全問題は NP の中で「最も難しい」問題である:そのうちのどれか1つに対する効率的なアルゴリズムは、帰着を通じて NP のすべての問題に対する効率的なアルゴリズムに変換される。

ブール充足可能性問題(SAT)— 変数 x1,…,xmx_1,\dots,x_m からなるブール式が与えられたとき、それを真にする真偽値の割り当てが存在するかを判定する問題 — はNP完全である。

なぜ正しいのか?

SATが明らかにNPに属すること:充足する割り当ては、値を代入するだけで多項式時間で確認できる証拠である。深い部分は、すべてのNP問題がSATに帰着することを示すことである — これは、ブール式が、任意の多項式時間検証器の実行全体を、セルごと、瞬間ごとに段階的に記述できるほど表現力があるためであり、「証拠が存在するか」が「この巨大な式が充足可能か」に変わる。

証明

A∈NPA \in NP とし、長さ nn の入力に対して長さ高々 nkn^k の証拠と組み合わせて高々 nkn^k の時間で動作する多項式時間検証器 VV を持つとする。長さ nn の入力 xx を固定し、あるブール式 ϕx\phi_x を、あるチェックリー証拠が VV を受理させる場合にちょうど充足可能となるように構築する。

未知の証拠 yy に対する (x,y)(x,y) 上の VV の計算全体を、タブローとして並べたものを想像する:nk×nkn^k \times n^k のグリッドで、行 tt が時刻 tt における検証器のテープ全体の内容とヘッド位置を記録する。(セル、時刻、可能な記号)の組ごとにブール変数を導入し、その時刻にそのセルにどの記号があるかを記録する — グリッドのセル数と時刻の数は多項式個なので、これは多項式個の変数となる。

式 ϕx\phi_x は、4つの局所的で容易に確認できる条件を課す節の連言(AND)として構築される:(1) 各時刻において各セルはちょうど1つの記号を持つ;(2) 行 00 は固定入力 xx と、まだ推測されていない証拠 yy 用の空白プレースホルダを正しく符号化する;(3) 連続する2つの時刻にまたがる隣接セルの小さな窓は、VV の遷移規則と整合する(ここで、行 00 で自由にしておいた証拠のビットが、計算の残りの部分に影響を与えることができる);(4) 最終時刻のあるセルが受理状態を記録する。

これらの条件はそれぞれ、小さな固定サイズの変数の近傍しか制約しないので、それぞれ定数個の節に翻訳され、制約すべき近傍は多項式個しかない — したがって ϕx\phi_x は多項式サイズであり、xx から多項式時間で計算可能である。構築により、ϕx\phi_x が充足可能であることは、整合的なタブローが存在すること、すなわちある証拠 yy が V(x,y)V(x,y) を受理させること、すなわち x∈Ax \in A であることとちょうど同値である。これは任意の A∈NPA \in NP に対する帰着 A≤pSATA \le_p \text{SAT} を示しており、上で示した SAT∈NP\text{SAT} \in NP と合わせて、SATがNP完全であることを証明する。

BB がNP完全であり、かつ B∈PB \in P であるならば、P=NPP = NP である。

なぜ正しいのか?

BB がNP完全であることは、すべてのNP問題が多項式時間で BB のインスタンスとして書き換えられることを意味する。もし BB 自身が多項式時間で解けるなら、書き換えのステップと解くステップを連結することで、元のNP問題も多項式時間で解けることになる — したがって、扱いやすいNP完全問題がたった1つあれば、すべてのNP問題を道連れにしてPまで引きずり下ろす。

証明

BB がNP完全であり、BB を時間 O(nk1)O(n^{k_1}) で解くアルゴリズムがあるとする。任意の A∈NPA \in NP を取る;BB のNP完全性より A≤pBA \le_p B であり、これは AA のインスタンスを BB のインスタンスに写し、イエス/ノーの答えを保つ、時間 O(nk2)O(n^{k_2}) で計算可能な帰着関数 ff が存在することを意味する。

AA に対する長さ nn の入力 xx について、まず f(x)f(x) を計算する:これには時間 O(nk2)O(n^{k_2}) かかり、特に出力 f(x)f(x) の長さは高々 O(nk2)O(n^{k_2}) である(多項式時間アルゴリズムは実行時間より多くの出力を書き出せない)。次に f(x)f(x) に対して BB の多項式時間アルゴリズムを実行する:∣f(x)∣=O(nk2)|f(x)| = O(n^{k_2}) なので、これには時間 O((nk2)k1)=O(nk1k2)O\big((n^{k_2})^{k_1}\big) = O(n^{k_1 k_2}) かかる。

全体の実行時間は O(nk2)+O(nk1k2)=O(nk1k2)O(n^{k_2}) + O(n^{k_1 k_2}) = O(n^{k_1 k_2}) であり、依然として nn に関する多項式である(2つの多項式の合成は多項式である)。帰着の正しさより、xx が AA の「はい」インスタンスであることと f(x)f(x) が BB の「はい」インスタンスであることは同値なので、この組み合わせた手続きは AA を多項式時間で正しく判定する。

A∈NPA \in NP は任意だったので、すべてのNP問題は多項式時間アルゴリズムを持つ、すなわち NP⊆PNP \subseteq P である。常に成り立つ包含 P⊆NPP \subseteq NP と合わせて、P=NPP = NP が得られる。

いくつかの有名な問題の複雑性の状況
問題既知の状況
リストのソートP に属する:O(nlog⁡n)O(n\log n) 回の比較で十分
素数判定2002年以降 P に属する(AKSアルゴリズム)
ブール充足可能性(3-SAT)NP完全(クック・レビン、1971年)
巡回セールスマン問題(決定版)NP完全
グラフ同型性判定NP に属する;2015年以降準多項式時間アルゴリズムあり(Babai);PかNP完全かは未知
整数の素因数分解NP かつ co-NP に属する;Pに属するかは未知 — RSAの安全性の根拠となる困難性の仮定

大学実世界での応用と具体例

ある問題がNP完全であると認識することには、即座に実用的な価値がある:それは技術者に、正確で常に高速なアルゴリズムを探すのをやめ、代わりにヒューリスティック、近似アルゴリズム、あるいは特殊構造を利用すべきだと教える。これはまた、現代暗号(RSAの安全性は素因数分解が困難であることに依存する)、物流とスケジューリング(車両経路問題、試験時間割)、生命情報学(タンパク質構造予測、配列アラインメントの各種変形)、コンパイラ最適化(レジスタ割り当てはグラフ彩色そのものであり、NP完全である)の基盤にもなっている。

例: 頂点被覆を独立集合に変換する

55 個の頂点 {1,2,3,4,5}\{1,2,3,4,5\} からなり、辺 (1,2),(2,3),(3,4),(4,5)(1,2), (2,3), (3,4), (4,5) を持つパスグラフを考える。nn 個の頂点を持つグラフ GG がサイズ kk の頂点被覆を持つことと、サイズ n−kn-k の独立集合を持つことが同値であるという事実を用い、{1,3,5}\{1,3,5\} がこのグラフの最大独立集合であることが与えられたとき、最小頂点被覆のサイズを求めよ。

解答

まず {1,3,5}\{1,3,5\} が本当に独立であることを確認する:辺 (1,2),(2,3),(3,4),(4,5)(1,2), (2,3), (3,4), (4,5) のいずれも両端点が {1,3,5}\{1,3,5\} に含まれることはなく、選ばれたどの2頂点も隣接しないため、サイズ 33 の有効な独立集合であることが確認できる;55頂点のパスは互いに隣接しない44頂点を持つことができない(唯一のパスに沿ってどこかで2頂点が隣接せざるを得ない)ため、これは最大である。

n=5n=5、独立集合のサイズ33として帰着の公式を適用する:最小頂点被覆のサイズ =n−3=5−3=2= n - 3 = 5 - 3 = 2。

直接確認する:補集合 {2,4}\{2,4\} が頂点被覆になっているはずである。すべての辺が {2,4}\{2,4\} に少なくとも1つの端点を持つか確認する:辺 (1,2)(1,2) は 22 に接する;辺 (2,3)(2,3) は 22 に接する;辺 (3,4)(3,4) は 44 に接する;辺 (4,5)(4,5) は 44 に接する。4本の辺すべてがわずか22頂点で被覆され、答えが確認できる。

頂点被覆と独立集合のこの同値性は、上で論じたような多項式時間帰着(実際にはここでは線形時間で計算可能で可逆な、非常に単純な帰着)そのものである:頂点被覆も独立集合もどちらもNP完全な決定問題であり、この帰着は、それらが正確な意味で、2つの異なる角度から見た同じ問題であることを示している。

例: なぜ総当たりは控えめな規模でも失敗するのか

nn 個のブール変数を持つ充足可能性問題に対する総当たりアルゴリズムは、可能な真偽値の割り当て 2n2^n 通りをすべて確認し、高速なコンピュータ上で1つの割り当てあたり約 10−910^{-9} 秒(1ナノ秒)を費やす。n=50n=50 変数の場合、この総当たり探索が何秒かかるかを、最も近い10のべき乗で見積もれ。

解答

必要な確認回数は 2502^{50} である。210=1024≈1032^{10} = 1024 \approx 10^3 なので、250=(210)5≈(103)5=10152^{50} = (2^{10})^5 \approx (10^3)^5 = 10^{15} となる;より正確には 250≈1.1259×10152^{50} \approx 1.1259 \times 10^{15} である。

割り当て1つあたりのコスト 10−910^{-9} 秒を掛けると、合計時間はおよそ 1.1259×1015×10−9=1.1259×1061.1259 \times 10^{15} \times 10^{-9} = 1.1259 \times 10^{6} 秒となる。

最も近い10のべき乗に丸めると、これは約 10610^{6} 秒 — およそ1111日から1313日間の連続計算であり、これはわずか n=50n=50 変数、実応用では小さいとみなされる規模である(産業用のSATインスタンスは日常的に数千から数百万の変数を持つ)。

これこそが、多項式時間と指数関数時間の区別が、理論だけでなく実務においても重要である理由である:仮に、例えば n3n^3 ステップで動く多項式アルゴリズムがあれば、必要なのはわずか 503=125,00050^3 = 125{,}000 ステップ — ミリ秒の何分の1か — であり、PとNPの問題がいかに大きな実務上の利害を持つかを示している。

n=20n=20 のとき、n3n^3 と 2n2^n のどちらが大きいか。

「NP」は実際には何の略か。

クック・レビンの定理によれば、史上初めてNP完全であることが証明された問題はどれか。

もし誰かがSATのような単一のNP完全問題に対する多項式時間アルゴリズムを発見したら、何が導かれるか。

参考文献

  1. Stephen A. Cook (1971). The Complexity of Theorem-Proving Procedures · DOI:10.1145/800157.805047
  2. Michael Sipser (2012). Introduction to the Theory of Computation
  3. Michael R. Garey, David S. Johnson (1979). Computers and Intractability: A Guide to the Theory of NP-Completeness
  4. Clay Mathematics Institute (2000). P vs NP Problem