P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして,...

85
P, NP, NP 困難, NP 完全 田浦健次朗 1 / 69

Transcript of P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして,...

Page 1: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

P, NP, NP 困難, NP 完全

田浦健次朗

1 / 69

Page 2: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

動機

これまで見てきたアルゴリズムの計算量 整列

O(n2) : 挿入ソート, バブルソート O(n log n) : クイックソート (平均), マージソート, etc. O(n + K) : バケットソート (キーが ∈ [0,K))

探索 O(n) : 線形探索 O(n log n) : 2 分探索, 2 分探索木 (平均), B 木 O(1) : ハッシュ(平均)

etc.どれもそこそこ「実用的な」計算量のアルゴリズム

2 / 69

Page 3: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

多項式時間アルゴリズム ・ クラス P 入力の大きさ (表すのに必要な bit 数) を n とする

問題に応じて「配列の要素数」などを n とする 入力の bit 数に比例した数であれば同じこと

時間計算量 ∈ O(nのある多項式) であるアルゴリズムを「多項式時間アルゴリズム (Polynomial TimeAlgorithm)」 という

これまで紹介したアルゴリズムは, どれも多項式時間アルゴリズム

注: O(n log n) などの計算量のアルゴリズムも多項式時間アルゴリズム (∵ O(n log n) ⊂ O(n2))

多項式時間アルゴリズムが存在する問題全体の集合を,クラス Pという

これまで取り上げた問題はどれもクラス P

3 / 69

Page 4: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

解釈

クラス P は (コンピュータで)「解きやすい ・易しい」ことを大雑把にとらえる定義

多項式時間アルゴリズム: ≈ そこそこ速いアルゴリズム クラス P: ≈ (コンピュータで) 簡単に解ける問題

そこで クラス P に属する問題を, 「易しい (tractable な)問題」 クラス P に属さない問題を, 「難しい ・手に負えない

(intractable な)問題」と呼ぶこともある

4 / 69

Page 5: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

だが…

世の中には O(n), O(n log n), O(n2) はおろか, O(n100),どんな「n の多項式」の計算量のアルゴリズムも 知られていない問題が存在する

しかもそれらは非常によく現れる 典型例: n 個の変数の取りうる値が ≥ 2 個ずつあり, それらを「しらみつぶし」にあたるよりましな方法が思いつかない場合 (→ Ω(nの指数関数))

5 / 69

Page 6: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

難しいまたは難し「そうな」問題

1. いくつかの問題は「難しいこと」が証明されている つまり「多項式時間アルゴリズムが存在しないこと」が証明されている

2. 一方, 非常に数多くの問題は「難しそうだが, そうと証明されてもいない」

多項式時間アルゴリズムは知られていない それが存在しないことも証明されていない

3. そのような問題の多くは, 以降で述べるNP 完全問題である

6 / 69

Page 7: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

NP 完全問題について

正確な定義は後回しにして, 知られていること それらは難し「そう」

多項式時間アルゴリズムは知られていない それが存在しないことも証明されていない 多くの人は「実際難しい」と予想している

もし「ある」NP 完全問題について, 多項式時間アルゴリズムを思いつく, 多項式時間アルゴリズムが存在しないことを証明する,

どちらでも歴史に名を残せる 未解決問題 P = NP 予想 を解いた (反証 ・証明した)ことになる

7 / 69

Page 8: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

読み物 吉永良正. 数学 ・ まだこんなことがわからない 難問から見た現代数学入門

中村亨. 数学 21 世紀の 7 大難問 数学の未来をのぞいてみよう

8 / 69

Page 9: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

難しい問題 ・ NP 完全問題を学ぶ実用的意義

ある問題を解きたいが, 良い (速そうな) アルゴリズムが思いつかない

「難しい」または「NP 完全」であることを証明できれば, それには多項式時間アルゴリズムが存在しない (または知られていない) と確信が持てる → 実らない努力をしないですむ

正しい努力の方向性を与える1. 指数時間だがある程度実用的な手法 (効率的な枝刈り)2. 近似解を求める手法3. よい手法が知られた他の NP 完全問題への帰着 ・ それ用のライブラリを利用

9 / 69

Page 10: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

以降の概要

1. NP 完全問題の実例2. クラス NP (Non-deterministic Polynomial Time) の定義

3. クラス NP 困難 (NP-hard)の定義4. クラス NP 完全 (NP-complete)の定義5. ある問題が NP 完全であることを示すには

5.1 最初のひとつ5.2 多項式時間還元

10 / 69

Page 11: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

NP 完全問題の実例 I1. 論理式関連

1.1 SAT : 命題論理式の充足可能性1.2 3SAT : 3 項節の連言標準形の充足可能性

2. 整数関連2.1 SET PARTITION : 集合の等分割2.2 KNAPSACK : ナップザック問題2.3 0-1 INTEGER PROGRAMMING: 0-1 整数計画問題

3. 集合関連3.1 SET COVER : 集合被覆問題3.2 HITTING SET : 集合打問題

4. グラフ関連4.1 VERTEX COVER : 頂点被覆4.2 INDEPENDENT VERTEX SET : 独立頂点集合

11 / 69

Page 12: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

NP 完全問題の実例 II

4.3 CLIQUE : 完全部分グラフ4.4 3D MATCHING : 3 次元マッチング4.5 SUBGRAPH ISOMORPHISM : 同型部分グラフ4.6 HAMILTON CIRCUIT : ハミルトン閉路4.7 TSP : 巡回セールスマン4.8 GRAPH COLORING : 彩色

5. その他無数 http://www.nada.kth.se/~viggo/problemlist/

compendium.html http://en.wikipedia.org/wiki/List_of_

NP-complete_problems

12 / 69

Page 13: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

実例 1: 命題論理式の充足可能性 (SAT)

1. 入力: n 個の bool 変数 x0, . . . , xn−1 ∈ 0, 1 に関する命題論理式E (変数, ¬,∧,∨,→ のみからなる式)

一般性を失うことなく, CNF (連言標準形)を仮定

2. 出力: E が充足可能 (≡ 真にする値の割り当てが存在する) か否か

例:1. E(x0, x1, x2) = (x0 ∨ ¬x1) ∧ (¬x0 ∨ x2) ∧ (¬x0 ∨ x1 ∨ ¬x2)

→ 1 (∵ E(0, 0, 1) = 1)2. E(x0, x1, x2) =上の式 ∧ (x0 ∨ x1 ∨ ¬x2)

→ 0

13 / 69

Page 14: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

連言標準形 (Conjunctive Normal Form; CNF)

別名: 和積標準形, 乗法標準形 以下の E の形をした論理式

(式) E ::= C ∧ · · · ∧ C (節; clause) C ::= l ∨ · · · ∨ l (リテラル; literal) l ::= 変数または ¬ 変数

14 / 69

Page 15: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

補足: 3SAT, 2SAT

3SAT (2SAT) : SAT において, 一つの節に含まれるリテラルの数を 3 (2) に限定したもの

3SAT は NP 完全 2SAT は NP 完全ではない

15 / 69

Page 16: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

SAT の自明な (Ω(2n) の) 解法

1. xi = 0, 1 (i = 0, 1, . . . , n − 1) 全ての組み合わせ (2n 通り) に対して E を評価

2. どれかでも 1 となれば 1, そうでなければ 0

16 / 69

Page 17: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

SAT の応用

SAT ≈ 0-1 の 2 値からなる, 固定個の変数の「方程式」を解く

色々な「制約充足問題」は SAT に帰着 (エンコーディング) できる

例: 数独http://d.hatena.ne.jp/ku-ma-me/20080108/p1

1. 変数 xi,v (1 ≤ i ≤ 81, 1 ≤ v ≥ 9). 729 個2. xi,v = 1 ⇐⇒ マス i に v を置く3. 制約: 「これこれ 9 マスの値の集合が 1, 2, …, 9 である」という形の制約が 27 個

17 / 69

Page 18: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

SAT の重要な w 応用 同期デジタル回路の検証 同期デジタル回路 ≈ 状態遷移関数

状態: 各場所の真偽値 (X ≡ x0, x1, . . .) 初期状態: init(X); 状態遷移: trans(X,X′); クロック t における状態が X ならばクロック (t + 1) における状態が X′ でありうる

“この回路は k ステップの間, エラー状態 e(X) に陥らない” ⇐⇒

init(X0)∧trans(X0,X1) ∧ trans(X1,X2) ∧ · · · ∧ trans(Xk−1,Xk)∧(e(X0) ∨ e(X1) ∨ · · · ∨ e(Xk))

が充足不能18 / 69

Page 19: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

実例 2: SET PARTITION (集合の等分割)

入力: n 個の整数 a0, . . . , an−1

出力: それらを「等分」できるか? つまり, I ⊂ [0, n) を選び, ∑

i∈Iai =

∑i∈I

とできるか?例:

1. 9,1,3,5,6→ 1 (∵ 9 + 3 = 1 + 5 + 6)

2. 7,2,3,0→ 0

19 / 69

Page 20: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

SET PARTITION の自明な (Ω(2n) の) 解法

1. 各 i ∈ [0, n) を, I に含めるか否か全ての組み合わせ (2n

通り) に対して, ∑i∈I

ai =∑i∈I

か否かを評価2. どれかでも 1 となれば 1, そうでなければ 0

20 / 69

Page 21: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

実例 3: GRAPH COLORING (グラフ彩色) 入力: 無向グラフと「色数」(整数)k 出力: k-彩色 (各頂点を k 色のどれかで塗り, 隣り合う頂点の色を異ならせる塗り方) が存在するか?

3-彩色が存在するか?x0

x10

x2

x13

x7

x9

x8

x11 x12

x3

x5

x6

x4

x1

21 / 69

Page 22: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

実例 3: GRAPH COLORING (グラフ彩色) 入力: 無向グラフと「色数」(整数)k 出力: k-彩色 (各頂点を k 色のどれかで塗り, 隣り合う頂点の色を異ならせる塗り方) が存在するか?

3-彩色が存在するか?x0

x10

x2

x13

x7

x9

x8

x11 x12

x3

x5

x6

x4

x1

21 / 69

Page 23: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

GRAPH COLORING の自明な (Ω(kn) の) 解法

1. 各頂点に色を塗る全ての組み合わせ (kn 通り) に対して,隣り合う頂点すべてに違う色が塗られているかを検査

2. どれかひとつでも, 隣り合う頂点すべてに違う色が塗られていれば 1, そうでなければ 0

22 / 69

Page 24: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

NP および関連するクラスの定義: 概要

NP : 非決定的多項式時間アルゴリズムが存在する問題 NP 困難: NP のどの問題よりも同程度以上に難しい問題

NP 完全: NP であって NP 困難な問題

23 / 69

Page 25: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

NP

NP : Non-deterministic Polynomial Time-Solvable = 非決定的アルゴリズムで多項式時間で解ける問題

NP が Not Polynomial Time-Solvable のことだというのは大勘違い

そうであるかどうかがまさしく P=NP 予想にほかならない

24 / 69

Page 26: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

非決定的アルゴリズムとは 出力は 0 または 1 (決定問題) 非決定的アルゴリズム ≈ 通常のプログラムに「非決定的選択」という文を加えたものeither S0 or S1;は, S0 もしくは S1 のどちらかを実行する

出力 「ある」選択で出力が 1 なら 1 「すべての」選択で出力が 0 なら 0

計算量 出力が 1 となる入力に対する最大ステップ数

...

...

...

...

...

...

...

...

either S0 or S1;

S0 S1

25 / 69

Page 27: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

注:

世の中の実用的な問題はしばしば, 決定問題 (出力が0,1)ではなく, 最適化問題

最適化問題: を満たす範囲で, を最大化せよ 決定問題: を満たす範囲で, ≥ K とできるか?

明らかに, 最適化の方が一般的な問題 一方, 決定問題を繰り返し使って (2 分探索), 近似的な最適値を求めることもできる

決定問題を取り扱うのは理解のしやすさ, 定式化の容易さのため

26 / 69

Page 28: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

SAT を解く非決定的アルゴリズム1 bool sat(E, n) 2 bool x[n];3 for (i = 0; i < n; i++) 4 either x[i] = 0 or x[i] = 1;5 6 if (evaluate(E, x)) return 1;7 else return 0;8

明らかに, E が充足可能およびその時に出力が 1 計算量: O(n + Eの評価時間)

∴ SAT ∈ NP

27 / 69

Page 29: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

グラフ彩色を解く非決定的アルゴリズム1 int choose_color(int k) 2 for (c = 0; c < k; c++)3 either return c; or continue;4 return 0; 5 bool color(G, n, k) 6 bool C[n];7 for (i = 0; i < n; i++)8 C[i] = choose_color(k);9 if (check_neighbor_colors(G, C)) return 1;

10 else return 0;

明らかに, k-彩色が可能 ⇐⇒ 出力が 1 計算量: O(n +チェック時間) ∴ GRAPH COLORING ∈ NP

他の多くの問題についてもそれが, ∈ NP であることを示すのは同様に容易 28 / 69

Page 30: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

NP (しつこく再掲)

= 非決定的アルゴリズムで多項式時間で解ける問題 ≈ 「解候補」が本当にかどうかを多項式時間でチェックできる問題

29 / 69

Page 31: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

P と NP の容易にわかる関係

P ⊂ NP 非決定的アルゴリズムで p(n) 時間で解ける問題は,

2p(n) 時間で決定的に解ける

30 / 69

Page 32: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

NP 困難

NP に属するどの問題よりも同程度以上に難しい問題 鍵となる概念: ある問題 A が別の問題 B よりも「同程度以上に難しい」とは?

→ 「還元 (reduction)」の概念

31 / 69

Page 33: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

問題を別の問題へ「還元」するとは? A を解くことを B を解くことに帰着させること

1. 問題 A の入力 a を問題 B の入力 b へ変換し,2. B を解くアルゴリズムで b に対する出力を求め,3. それを元に a の出力を得る

特に, 1, 3. の変換が入力の多項式時間で行われる時, Aは B に多項式時間還元可能 (polynomial timereducible) であるといい, A poly−→ Bで表す

1 bool solve_A(a) 2 b = convert_input(a);3 x = solve_B(b);4 return convert_output(x);5

32 / 69

Page 34: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

多項式時間還元可能性と問題の易しさ

定義:BはAと同程度以上に難しい def≡ A poly−→ B

つまり, 「もし」B が多項式時間で解けるならば, A もまたそうである, ということ

33 / 69

Page 35: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

NP 困難の定義

問題 A が NP 困難def≡ NP に属するあらゆる問題が, A に多項式時間還元可能

A

"AはNP困難"

多項式時間還元

NP

34 / 69

Page 36: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

NP 完全の定義

問題 A が NP 完全def≡ A が NP かつ A が NP 困難

A

"AはNP完全"

多項式時間還元

NP

35 / 69

Page 37: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

ある問題が NP 完全であることを知る意義 (再掲)

自分の解きたい問題が NP 完全とわかれば, 今日この世の中で「多項式時間アルゴリズムは世の中の誰も知らない」

→ 正しい作戦で先へ進める

36 / 69

Page 38: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

NP 完全であることの証明手法「A が NP 完全」を示すには以下の 2 つを示す

1. A が NP であること (多くの場合易しい)2. A が NP 困難であること (中心的課題)

既存の「ひとつの」NP 完全問題を, A に多項式時間還元3. 重要なこと

引き出し (NP 完全問題に関する知識) の多さ 問題間の類似性を見つける嗅覚

多項式時間還元

NP完全

A

37 / 69

Page 39: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

「最初の一つ」 先の方法は「既に NP 完全と知られた問題」があって初めて成立する

「最初の一つ」ははるかに困難 (金字塔) Stephen Cook. The Complexity of Theorem-Proving

Procedures. 1971.http://dl.acm.org/citation.cfm?id=805047

書き出し:It is shown that any recognition problemsolved by a polynomial time-boundednondeterministic Turing machine can be“reduced” to the problem of determiningwhether a given propositional formula is atautology.

Theorem-Proving Procedures とは SAT のこと38 / 69

Page 40: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

多項式時間還元の実例: 初級編

A poly−→ B において, 「見るからに B の方が一般的な問題」

SET PARTITION poly−→ KNAPSACK SET PARTITION poly−→ 0-1 INTEGER

PROGRAMMING CLIQUE poly−→ SUBGRAPH HAMILTON CIRCUIT poly−→ TSP

例として青字を説明

39 / 69

Page 41: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

KNAPSACK (ナップザック問題)

1. 入力: n 個の商品の「重さ」と「価値」wi, vi(i = 0, . . . , n − 1), 最大の重さ W と, 最小の価値 V

2. 出力: 指定された重さ以内で指定された価値以上の商品を選べるか? つまり,

w0x0 + · · ·+ wn−1xn−1 ≤ Wv0x0 + · · ·+ vn−1xn−1 ≥ V

を満たす xi ∈ 0, 1 (i = 0, . . . , n − 1) は存在するか?

40 / 69

Page 42: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

SET PARTITION poly−→ KNAPSACK SET PARTITION (再掲): a0, . . . , an−1 に対し,∑

i∈Iai =

∑i∈I

ai

となる I ⊂ [0, n) は存在するか? ∵

1. 結局, A =∑n−1

i=0 ai として,

a0y0 + · · ·+ an−1yn−1 = S/2

となる, yi ∈ 0, 1 は存在するかということ

2. それは以下の KNAPSACK を解くのと同じ

wi = vi = ai (i = 0, · · · ,n − 1) W = V = S/2

3. 上記の「変換」(a0, . . . , an−1 から, wi, vi,W,V を導く) は明らかに n の多項式時間で可能

41 / 69

Page 43: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

SET PARTITION poly−→ KNAPSACK SET PARTITION (再掲): a0, . . . , an−1 に対し,∑

i∈Iai =

∑i∈I

ai

となる I ⊂ [0, n) は存在するか? ∵

1. 結局, A =∑n−1

i=0 ai として,

a0y0 + · · ·+ an−1yn−1 = S/2

となる, yi ∈ 0, 1 は存在するかということ2. それは以下の KNAPSACK を解くのと同じ

wi = vi = ai (i = 0, · · · ,n − 1) W = V = S/2

3. 上記の「変換」(a0, . . . , an−1 から, wi, vi,W,V を導く) は明らかに n の多項式時間で可能

41 / 69

Page 44: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

SET PARTITION poly−→ KNAPSACK SET PARTITION (再掲): a0, . . . , an−1 に対し,∑

i∈Iai =

∑i∈I

ai

となる I ⊂ [0, n) は存在するか? ∵

1. 結局, A =∑n−1

i=0 ai として,

a0y0 + · · ·+ an−1yn−1 = S/2

となる, yi ∈ 0, 1 は存在するかということ2. それは以下の KNAPSACK を解くのと同じ

wi = vi = ai (i = 0, · · · ,n − 1) W = V = S/2

3. 上記の「変換」(a0, . . . , an−1 から, wi, vi,W,V を導く) は明らかに n の多項式時間で可能

41 / 69

Page 45: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

SET PARTITION poly−→ KNAPSACK SET PARTITION (再掲): a0, . . . , an−1 に対し,∑

i∈Iai =

∑i∈I

ai

となる I ⊂ [0, n) は存在するか? ∵

1. 結局, A =∑n−1

i=0 ai として,

a0y0 + · · ·+ an−1yn−1 = S/2

となる, yi ∈ 0, 1 は存在するかということ2. それは以下の KNAPSACK を解くのと同じ

wi = vi = ai (i = 0, · · · ,n − 1) W = V = S/2

3. 上記の「変換」(a0, . . . , an−1 から, wi, vi,W,V を導く) は明らかに n の多項式時間で可能

41 / 69

Page 46: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

KNAPSACK は NP 完全

1. KNAPSACK ∈ NP の証明 (容易) ∵ 各商品を「選ぶ ・選ばない」の選択を非決定的に行えばよい

2. KNAPSACK は NP 困難 (今やった) ∵ SET PARTITION が NP 完全 (→ NP 困難) なので, SET PARTITION poly−→ KNAPSACK により,KNAPSACK も NP 困難

以上より, KNAPSACK は NP 完全

42 / 69

Page 47: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

0-1 INTEGER PROGRAMMING

1. 入力: A : m × n 行列 b : m 次元ベクトル c : n 次元ベクトル d : 整数

2. 出力: Ax ≤ b, cx ≥ d を満たす n 次元 0-1 ベクトルが存在するか?

43 / 69

Page 48: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

SET PARTITION poly−→ 0-1 INTEGERPROGRAMMING

簡単な演習問題 0-1 INTEGER PROGRAMMING は「見るからに一般的な問題」

SET PARTITION, KNAPSACK などをこれに還元するのは容易

44 / 69

Page 49: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

CLIQUE (完全部分グラフ)1. 入力: 無向グラフ G と整数 K2. 出力: G は頂点数 K のクリーク (G の部分グラフで完全グラフであるもの) を持つか?

例: 頂点数 5 のクリークを持つか?x0

x8

x9

x4

x11

x2

x10

x7

x6

x3

x1 x5

45 / 69

Page 50: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

CLIQUE (完全部分グラフ)1. 入力: 無向グラフ G と整数 K2. 出力: G は頂点数 K のクリーク (G の部分グラフで完全グラフであるもの) を持つか?

例: 頂点数 5 のクリークを持つか?x0

x8

x9

x4

x11

x2

x10

x7

x6

x3

x1 x5

45 / 69

Page 51: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

SUBGRAPH ISOMORPHISM (同型部分グラフ)1. 入力: 無向グラフ G, H2. 出力: G の部分グラフで, H と同型なものは存在するか?例: 左のグラフは右のグラフの一部か?

x0

x3

x5

x4

x1

x2

x15

x16

x8

x6

x17

x14

x9

x13

x10

x12

x11

x7

46 / 69

Page 52: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

SUBGRAPH ISOMORPHISM (同型部分グラフ)1. 入力: 無向グラフ G, H2. 出力: G の部分グラフで, H と同型なものは存在するか?例: 左のグラフは右のグラフの一部か?

x0

x3

x5

x4

x1

x2

x15

x16

x8

x6

x17

x14

x9

x13

x10

x12

x11

x7

46 / 69

Page 53: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

CLIQUE → SUBGRAPH ISOMORPHISM

簡単な演習問題

47 / 69

Page 54: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

HAMILTON CIRCUIT (ハミルトン閉路)1. 入力: 有向または無向グラフ G2. 出力: G にハミルトン閉路 (全ての頂点を一度ずつ含む,

G の閉路) は存在するか?

x6

x9

x8

x10

x12

x11

x5

x1

x2

x3

x7

x0

x4

48 / 69

Page 55: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

HAMILTON CIRCUIT (ハミルトン閉路)1. 入力: 有向または無向グラフ G2. 出力: G にハミルトン閉路 (全ての頂点を一度ずつ含む,

G の閉路) は存在するか?

x6

x9

x8

x10

x12

x11

x5

x1

x2

x3

x7

x0

x4

48 / 69

Page 56: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

TSP (巡回セールスマン)

1. 入力: 辺に重みのついた有向または無向グラフ G, 許容コスト W

頂点数を n, 辺 i → j の重みを wij とする

2. 出力: 全ての頂点を, 許容コスト以内で一周することができるか? つまり, 0, . . . , n − 1 の並び替え ai(i = 0, . . . , n − 1) で,

n−1∑i=0

wai,ai+1 ≤ W

となるものは存在するか? ただし, an = a0 とする

49 / 69

Page 57: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

HAMILTON CIRCUIT → TSP

簡単な演習問題

50 / 69

Page 58: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

注: 一筆書き

いわゆるグラフの「一筆書き」問題は, 無向グラフの全ての「辺」を一度ずつ使う閉路 (オイラー閉路) のこと

ハミルトン閉路とは違うので注意 オイラー閉路が存在するか否かの判定は易しい (NP 完全ではない)

オイラー閉路が存在 ⇐⇒ 奇数次の頂点数が 0 または2

51 / 69

Page 59: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

多項式時間還元の実例: 中級編

A poly−→ B において, 両者が実は似た問題だと気づくのに少し眼力を要する場合

VERTEX COVER poly−→ INDEPENDENT VERTEXSET

INDEPENDENT VERTEX SET poly−→ CLIQUE

52 / 69

Page 60: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

VERTEX COVER (頂点被覆)1. 入力: 無向グラフ G = ⟨V,E⟩ と整数 K

V の部分集合 C ⊂ V が, E の全ての辺 u ↔ v に対してu ∈ C または v ∈ C を満たす時, C は G を被覆するという

2. 出力: G を被覆する頂点の集合 C で |C| ≤ K のものが存在するか

例: 大きさ 3 の被覆が存在するか?

x6

x8

x11

x10 x9

x12

x3

x4

x5

x1 x2

x7 x0

53 / 69

Page 61: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

VERTEX COVER (頂点被覆)1. 入力: 無向グラフ G = ⟨V,E⟩ と整数 K

V の部分集合 C ⊂ V が, E の全ての辺 u ↔ v に対してu ∈ C または v ∈ C を満たす時, C は G を被覆するという

2. 出力: G を被覆する頂点の集合 C で |C| ≤ K のものが存在するか

例: 大きさ 3 の被覆が存在するか?

x6

x8

x11

x10 x9

x12

x3

x4

x5

x1 x2

x7 x0

53 / 69

Page 62: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

INDEPENDENT VERTEX SET (独立頂点集合)

1. 入力: 無向グラフ G = ⟨V,E⟩ と整数 K V の部分集合 I ⊂ V は, I の頂点同士を結ぶ辺が存在しない時, I は G の独立集合であるという

2. 出力: G の独立集合 I ⊂ V で |I| ≥ K のものが存在するか

例: 大きさ 8 の独立集合が存在するか?x0

x7

x10

x2

x12x11

x9

x4

x6x5

x8

x1

x3

54 / 69

Page 63: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

INDEPENDENT VERTEX SET (独立頂点集合)

1. 入力: 無向グラフ G = ⟨V,E⟩ と整数 K V の部分集合 I ⊂ V は, I の頂点同士を結ぶ辺が存在しない時, I は G の独立集合であるという

2. 出力: G の独立集合 I ⊂ V で |I| ≥ K のものが存在するか

例: 大きさ 8 の独立集合が存在するか?x0

x7

x10

x2

x12x11

x9

x4

x6x5

x8

x1

x3

54 / 69

Page 64: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

3 つの問題の関連

G = ⟨V,E⟩ とする. 以下の 3 つは同値1. C が G の頂点被覆2. V − C が G の独立頂点集合3. V − C が G の補グラフGc のクリークを作る

55 / 69

Page 65: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

補グラフグラフ G = ⟨V,E⟩ の「補グラフ」GC = ⟨V ′,E ′⟩ とは,

G と同じ頂点を持ち (V = V ′), G に枝がない頂点間およびそれらの間にのみ辺が存在する ((u, v) ∈ E ′ ⇐⇒ (u, v) ∈ E ′)

グラフグラフ (緑)とその補グラフ (赤)

a b

c

d

ef

56 / 69

Page 66: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

関連の証明

C が G を被覆⇐⇒ すべての (u, v) ∈ E に対し, u ∈ C または v ∈ C⇐⇒ すべての (u, v) ∈ E に対し, u ∈ V − C または v ∈ V − C⇐⇒ V − C が G の独立頂点集合

D が GC のクリークを作る⇐⇒ すべての u ∈ D, v ∈ D に対し, (u, v) ∈ E⇐⇒ (u, v) ∈ E ならば u ∈ D または v ∈ D⇐⇒ D が G の独立頂点集合

57 / 69

Page 67: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

VERTEX COVER poly−→ INDEPENDENT SET

もはや簡単な演習問題

58 / 69

Page 68: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

INDEPENDENT SET poly−→ CLIQUE

もはや簡単な演習問題

59 / 69

Page 69: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

ここまでのところ青字が取り上げた多項式還元

SAT

3SAT

VERTEX COVER 3D MATCHING

SET PARTITION

KNAPSACK0-1 INTEGER

PROGRAMMING

HITTING SETINDEPENDENT

VERTEX SETHAMILTON CIRCUIT

CLIQUE

SUBRAPHISOMORPHISM

TSP

難しい例として 3SAT → VERTEX COVER を取り上げる60 / 69

Page 70: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

3SAT → VERTEX COVER 3SAT:

入力: 各節が 3リテラルから成るCNF (3CNF) 出力: 充足可能 (全体を真にするように変数へ真偽を割り当てられる) か否か?

用語復習: リテラル: xi または ¬xi 節: リテラル ∨ リテラル ∨ リテラル CNF: 節 ∧ 節 ∧ 節 ∧ 節 ∧ · · · 3CNF の例

(x0 ∨ ¬x3 ∨ x9) ∧ (¬x0 ∨ x4 ∨ ¬x13) ∧ . . .

VERTEX COVER: 入力: 無向グラフと整数 K 出力: K 個以内の頂点を選び, グラフの各辺の端点のどちらかは必ず選ばれているようにできるか?

61 / 69

Page 71: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

3SAT の組み合わせ問題的な言い換え

E = (⃝∨⃝∨⃝)∧ (⃝∨⃝∨⃝)∧ (⃝∨⃝∨⃝)∧ · · · 全体を真にする ⇐⇒

1. 各節から少なくともひとつずつ (真にする) リテラルを選ぶ2. xi と ¬xi を同時には選べない

62 / 69

Page 72: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

3SAT → VERTEX COVER考え方 (3SAT を VERTEX COVER に還元):

3SAT 問題の入力 E が与えられたとする それをもとにグラフ G と整数 K を「作る」 以下を満たすように

E が充足可能 ⇐⇒ グラフ G に K 頂点の頂点被覆が存在

( )( )( )( )

...

E G

63 / 69

Page 73: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

3SAT → VERTEX COVER

1. 各リテラルにひとつ頂点を作り, xi と ¬xi を辺で結ぶ(リテラル頂点)

2. 節 l ∨ m ∨ n に対し, 図のような部分構造を作る(clause頂点)

...

64 / 69

Page 74: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

3SAT → VERTEX COVER

1. 各リテラルにひとつ頂点を作り, xi と ¬xi を辺で結ぶ(リテラル頂点)

2. 節 l ∨ m ∨ n に対し, 図のような部分構造を作る(clause頂点)

( )

64 / 69

Page 75: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

この部分構造のポイント この部分構造を被覆する最低数の頂点の選び方 (6 つの辺すべてから, どちらかの頂点を選ぶ) は本質的に 2 つある

1. 3 個の clause 頂点を選ぶ2. 3 個の clause 頂点と, (選ばれなかった clause 頂点と隣接する)1 個のリテラル頂点を選ぶ

最低でも 2 個の clause 頂点を選ばなくてはいけないこと,最低 3 頂点選ばないと被覆できないこと各自を確かめよ

65 / 69

Page 76: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

この部分構造のポイント この部分構造を被覆する最低数の頂点の選び方 (6 つの辺すべてから, どちらかの頂点を選ぶ) は本質的に 2 つある

1. 3 個の clause 頂点を選ぶ

2. 3 個の clause 頂点と, (選ばれなかった clause 頂点と隣接する)1 個のリテラル頂点を選ぶ

最低でも 2 個の clause 頂点を選ばなくてはいけないこと,最低 3 頂点選ばないと被覆できないこと各自を確かめよ

65 / 69

Page 77: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

この部分構造のポイント この部分構造を被覆する最低数の頂点の選び方 (6 つの辺すべてから, どちらかの頂点を選ぶ) は本質的に 2 つある

1. 3 個の clause 頂点を選ぶ2. 3 個の clause 頂点と, (選ばれなかった clause 頂点と隣接する)1 個のリテラル頂点を選ぶ

最低でも 2 個の clause 頂点を選ばなくてはいけないこと,最低 3 頂点選ばないと被覆できないこと各自を確かめよ

65 / 69

Page 78: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

この部分構造のポイント この部分構造を被覆する最低数の頂点の選び方 (6 つの辺すべてから, どちらかの頂点を選ぶ) は本質的に 2 つある

1. 3 個の clause 頂点を選ぶ2. 3 個の clause 頂点と, (選ばれなかった clause 頂点と隣接する)1 個のリテラル頂点を選ぶ

最低でも 2 個の clause 頂点を選ばなくてはいけないこと,最低 3 頂点選ばないと被覆できないこと各自を確かめよ

65 / 69

Page 79: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

この部分構造のポイント この部分構造を被覆する最低数の頂点の選び方 (6 つの辺すべてから, どちらかの頂点を選ぶ) は本質的に 2 つある

1. 3 個の clause 頂点を選ぶ2. 3 個の clause 頂点と, (選ばれなかった clause 頂点と隣接する)1 個のリテラル頂点を選ぶ

最低でも 2 個の clause 頂点を選ばなくてはいけないこと,最低 3 頂点選ばないと被覆できないこと各自を確かめよ

65 / 69

Page 80: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

この部分構造のポイント この部分構造を被覆する最低数の頂点の選び方 (6 つの辺すべてから, どちらかの頂点を選ぶ) は本質的に 2 つある

1. 3 個の clause 頂点を選ぶ2. 3 個の clause 頂点と, (選ばれなかった clause 頂点と隣接する)1 個のリテラル頂点を選ぶ

最低でも 2 個の clause 頂点を選ばなくてはいけないこと,最低 3 頂点選ばないと被覆できないこと各自を確かめよ

65 / 69

Page 81: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

これを全ての節に対して行い, グラフ G を作る n 変数, m clause の CNF に対し, K = n + 2m とする

例: (¬x0 ∨ x1 ∨ x4) ∧ (¬x1 ∨ ¬x3 ∨ x4) ⇒

...

66 / 69

Page 82: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

E が充足可能 → G に (n + 2m) 頂点の被覆が存在実際以下の頂点を選べばそれは G の頂点被覆になっている

各 clause で真になったリテラルに相当するリテラル頂点(n 個)

各 clause で真にならなかった (≤ 2 個の) リテラルに隣接する clause 頂点 (≤ 2m 個)

...

67 / 69

Page 83: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

G に (n + 2m) 頂点の被覆が存在 → E が充足可能 (1)観測: G を被覆するには,

先に注意したとおり, 互いに隣接する 3 個の clause 頂点から 2 個は選ばなくてはならない ≥ 2m

また明らかに, 隣接する 2 個のリテラル頂点から, 1 個は選ばなくてなならない (= n)

...

68 / 69

Page 84: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

G に (n + 2m) 頂点の被覆が存在 → E が充足可能 (2)

よって, (n + 2m) 頂点の被覆は必然的に リテラル頂点を n 個, clause 頂点から 2m 個,

という選び方になる そこで (n + 2m) 頂点の被覆に含まれる頂点のうち, リテラル頂点 (必然的に n 個) に相当するリテラルを真にすれば, E は明らかに充足される

...

69 / 69

Page 85: P, NP, NP 困難, NP 完全NP 完全問題について 正確な定義は後回しにして, 知られていること それらは難し「そう」 多項式時間アルゴリズムは知られていない

興味が湧いちゃった人は

Michael Garey and David Johonson. Computers andIntactability. http://www.amazon.co.jp/Computers-Intractability-Np-Completeness-Mathematical-Sciences/dp/0716710455

岩田茂樹. NP 完全問題入門

70 / 69