Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
P, NP, NP 困難, NP 完全
田浦健次朗
1 / 69
動機
これまで見てきたアルゴリズムの計算量 整列
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
多項式時間アルゴリズム ・ クラス P 入力の大きさ (表すのに必要な bit 数) を n とする
問題に応じて「配列の要素数」などを n とする 入力の bit 数に比例した数であれば同じこと
時間計算量 ∈ O(nのある多項式) であるアルゴリズムを「多項式時間アルゴリズム (Polynomial TimeAlgorithm)」 という
これまで紹介したアルゴリズムは, どれも多項式時間アルゴリズム
注: O(n log n) などの計算量のアルゴリズムも多項式時間アルゴリズム (∵ O(n log n) ⊂ O(n2))
多項式時間アルゴリズムが存在する問題全体の集合を,クラス Pという
これまで取り上げた問題はどれもクラス P
3 / 69
解釈
クラス P は (コンピュータで)「解きやすい ・易しい」ことを大雑把にとらえる定義
多項式時間アルゴリズム: ≈ そこそこ速いアルゴリズム クラス P: ≈ (コンピュータで) 簡単に解ける問題
そこで クラス P に属する問題を, 「易しい (tractable な)問題」 クラス P に属さない問題を, 「難しい ・手に負えない
(intractable な)問題」と呼ぶこともある
4 / 69
だが…
世の中には O(n), O(n log n), O(n2) はおろか, O(n100),どんな「n の多項式」の計算量のアルゴリズムも 知られていない問題が存在する
しかもそれらは非常によく現れる 典型例: n 個の変数の取りうる値が ≥ 2 個ずつあり, それらを「しらみつぶし」にあたるよりましな方法が思いつかない場合 (→ Ω(nの指数関数))
5 / 69
難しいまたは難し「そうな」問題
1. いくつかの問題は「難しいこと」が証明されている つまり「多項式時間アルゴリズムが存在しないこと」が証明されている
2. 一方, 非常に数多くの問題は「難しそうだが, そうと証明されてもいない」
多項式時間アルゴリズムは知られていない それが存在しないことも証明されていない
3. そのような問題の多くは, 以降で述べるNP 完全問題である
6 / 69
NP 完全問題について
正確な定義は後回しにして, 知られていること それらは難し「そう」
多項式時間アルゴリズムは知られていない それが存在しないことも証明されていない 多くの人は「実際難しい」と予想している
もし「ある」NP 完全問題について, 多項式時間アルゴリズムを思いつく, 多項式時間アルゴリズムが存在しないことを証明する,
どちらでも歴史に名を残せる 未解決問題 P = NP 予想 を解いた (反証 ・証明した)ことになる
7 / 69
読み物 吉永良正. 数学 ・ まだこんなことがわからない 難問から見た現代数学入門
中村亨. 数学 21 世紀の 7 大難問 数学の未来をのぞいてみよう
8 / 69
難しい問題 ・ NP 完全問題を学ぶ実用的意義
ある問題を解きたいが, 良い (速そうな) アルゴリズムが思いつかない
「難しい」または「NP 完全」であることを証明できれば, それには多項式時間アルゴリズムが存在しない (または知られていない) と確信が持てる → 実らない努力をしないですむ
正しい努力の方向性を与える1. 指数時間だがある程度実用的な手法 (効率的な枝刈り)2. 近似解を求める手法3. よい手法が知られた他の NP 完全問題への帰着 ・ それ用のライブラリを利用
9 / 69
以降の概要
1. NP 完全問題の実例2. クラス NP (Non-deterministic Polynomial Time) の定義
3. クラス NP 困難 (NP-hard)の定義4. クラス NP 完全 (NP-complete)の定義5. ある問題が NP 完全であることを示すには
5.1 最初のひとつ5.2 多項式時間還元
10 / 69
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
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
実例 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
連言標準形 (Conjunctive Normal Form; CNF)
別名: 和積標準形, 乗法標準形 以下の E の形をした論理式
(式) E ::= C ∧ · · · ∧ C (節; clause) C ::= l ∨ · · · ∨ l (リテラル; literal) l ::= 変数または ¬ 変数
14 / 69
補足: 3SAT, 2SAT
3SAT (2SAT) : SAT において, 一つの節に含まれるリテラルの数を 3 (2) に限定したもの
3SAT は NP 完全 2SAT は NP 完全ではない
15 / 69
SAT の自明な (Ω(2n) の) 解法
1. xi = 0, 1 (i = 0, 1, . . . , n − 1) 全ての組み合わせ (2n 通り) に対して E を評価
2. どれかでも 1 となれば 1, そうでなければ 0
16 / 69
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
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
実例 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
SET PARTITION の自明な (Ω(2n) の) 解法
1. 各 i ∈ [0, n) を, I に含めるか否か全ての組み合わせ (2n
通り) に対して, ∑i∈I
ai =∑i∈I
か否かを評価2. どれかでも 1 となれば 1, そうでなければ 0
20 / 69
実例 3: GRAPH COLORING (グラフ彩色) 入力: 無向グラフと「色数」(整数)k 出力: k-彩色 (各頂点を k 色のどれかで塗り, 隣り合う頂点の色を異ならせる塗り方) が存在するか?
3-彩色が存在するか?x0
x10
x2
x13
x7
x9
x8
x11 x12
x3
x5
x6
x4
x1
21 / 69
実例 3: GRAPH COLORING (グラフ彩色) 入力: 無向グラフと「色数」(整数)k 出力: k-彩色 (各頂点を k 色のどれかで塗り, 隣り合う頂点の色を異ならせる塗り方) が存在するか?
3-彩色が存在するか?x0
x10
x2
x13
x7
x9
x8
x11 x12
x3
x5
x6
x4
x1
21 / 69
GRAPH COLORING の自明な (Ω(kn) の) 解法
1. 各頂点に色を塗る全ての組み合わせ (kn 通り) に対して,隣り合う頂点すべてに違う色が塗られているかを検査
2. どれかひとつでも, 隣り合う頂点すべてに違う色が塗られていれば 1, そうでなければ 0
22 / 69
NP および関連するクラスの定義: 概要
NP : 非決定的多項式時間アルゴリズムが存在する問題 NP 困難: NP のどの問題よりも同程度以上に難しい問題
NP 完全: NP であって NP 困難な問題
23 / 69
NP
NP : Non-deterministic Polynomial Time-Solvable = 非決定的アルゴリズムで多項式時間で解ける問題
NP が Not Polynomial Time-Solvable のことだというのは大勘違い
そうであるかどうかがまさしく P=NP 予想にほかならない
24 / 69
非決定的アルゴリズムとは 出力は 0 または 1 (決定問題) 非決定的アルゴリズム ≈ 通常のプログラムに「非決定的選択」という文を加えたものeither S0 or S1;は, S0 もしくは S1 のどちらかを実行する
出力 「ある」選択で出力が 1 なら 1 「すべての」選択で出力が 0 なら 0
計算量 出力が 1 となる入力に対する最大ステップ数
...
...
...
...
...
...
...
...
either S0 or S1;
S0 S1
25 / 69
注:
世の中の実用的な問題はしばしば, 決定問題 (出力が0,1)ではなく, 最適化問題
最適化問題: を満たす範囲で, を最大化せよ 決定問題: を満たす範囲で, ≥ K とできるか?
明らかに, 最適化の方が一般的な問題 一方, 決定問題を繰り返し使って (2 分探索), 近似的な最適値を求めることもできる
決定問題を取り扱うのは理解のしやすさ, 定式化の容易さのため
26 / 69
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
グラフ彩色を解く非決定的アルゴリズム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
NP (しつこく再掲)
= 非決定的アルゴリズムで多項式時間で解ける問題 ≈ 「解候補」が本当にかどうかを多項式時間でチェックできる問題
29 / 69
P と NP の容易にわかる関係
P ⊂ NP 非決定的アルゴリズムで p(n) 時間で解ける問題は,
2p(n) 時間で決定的に解ける
30 / 69
NP 困難
NP に属するどの問題よりも同程度以上に難しい問題 鍵となる概念: ある問題 A が別の問題 B よりも「同程度以上に難しい」とは?
→ 「還元 (reduction)」の概念
31 / 69
問題を別の問題へ「還元」するとは? 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
多項式時間還元可能性と問題の易しさ
定義:BはAと同程度以上に難しい def≡ A poly−→ B
つまり, 「もし」B が多項式時間で解けるならば, A もまたそうである, ということ
33 / 69
NP 困難の定義
問題 A が NP 困難def≡ NP に属するあらゆる問題が, A に多項式時間還元可能
A
"AはNP困難"
多項式時間還元
NP
34 / 69
NP 完全の定義
問題 A が NP 完全def≡ A が NP かつ A が NP 困難
A
"AはNP完全"
多項式時間還元
NP
35 / 69
ある問題が NP 完全であることを知る意義 (再掲)
自分の解きたい問題が NP 完全とわかれば, 今日この世の中で「多項式時間アルゴリズムは世の中の誰も知らない」
→ 正しい作戦で先へ進める
36 / 69
NP 完全であることの証明手法「A が NP 完全」を示すには以下の 2 つを示す
1. A が NP であること (多くの場合易しい)2. A が NP 困難であること (中心的課題)
既存の「ひとつの」NP 完全問題を, A に多項式時間還元3. 重要なこと
引き出し (NP 完全問題に関する知識) の多さ 問題間の類似性を見つける嗅覚
多項式時間還元
NP完全
A
37 / 69
「最初の一つ」 先の方法は「既に 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
多項式時間還元の実例: 初級編
A poly−→ B において, 「見るからに B の方が一般的な問題」
SET PARTITION poly−→ KNAPSACK SET PARTITION poly−→ 0-1 INTEGER
PROGRAMMING CLIQUE poly−→ SUBGRAPH HAMILTON CIRCUIT poly−→ TSP
例として青字を説明
39 / 69
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
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
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
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
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
KNAPSACK は NP 完全
1. KNAPSACK ∈ NP の証明 (容易) ∵ 各商品を「選ぶ ・選ばない」の選択を非決定的に行えばよい
2. KNAPSACK は NP 困難 (今やった) ∵ SET PARTITION が NP 完全 (→ NP 困難) なので, SET PARTITION poly−→ KNAPSACK により,KNAPSACK も NP 困難
以上より, KNAPSACK は NP 完全
42 / 69
0-1 INTEGER PROGRAMMING
1. 入力: A : m × n 行列 b : m 次元ベクトル c : n 次元ベクトル d : 整数
2. 出力: Ax ≤ b, cx ≥ d を満たす n 次元 0-1 ベクトルが存在するか?
43 / 69
SET PARTITION poly−→ 0-1 INTEGERPROGRAMMING
簡単な演習問題 0-1 INTEGER PROGRAMMING は「見るからに一般的な問題」
SET PARTITION, KNAPSACK などをこれに還元するのは容易
44 / 69
CLIQUE (完全部分グラフ)1. 入力: 無向グラフ G と整数 K2. 出力: G は頂点数 K のクリーク (G の部分グラフで完全グラフであるもの) を持つか?
例: 頂点数 5 のクリークを持つか?x0
x8
x9
x4
x11
x2
x10
x7
x6
x3
x1 x5
45 / 69
CLIQUE (完全部分グラフ)1. 入力: 無向グラフ G と整数 K2. 出力: G は頂点数 K のクリーク (G の部分グラフで完全グラフであるもの) を持つか?
例: 頂点数 5 のクリークを持つか?x0
x8
x9
x4
x11
x2
x10
x7
x6
x3
x1 x5
45 / 69
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
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
CLIQUE → SUBGRAPH ISOMORPHISM
簡単な演習問題
47 / 69
HAMILTON CIRCUIT (ハミルトン閉路)1. 入力: 有向または無向グラフ G2. 出力: G にハミルトン閉路 (全ての頂点を一度ずつ含む,
G の閉路) は存在するか?
x6
x9
x8
x10
x12
x11
x5
x1
x2
x3
x7
x0
x4
48 / 69
HAMILTON CIRCUIT (ハミルトン閉路)1. 入力: 有向または無向グラフ G2. 出力: G にハミルトン閉路 (全ての頂点を一度ずつ含む,
G の閉路) は存在するか?
x6
x9
x8
x10
x12
x11
x5
x1
x2
x3
x7
x0
x4
48 / 69
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
HAMILTON CIRCUIT → TSP
簡単な演習問題
50 / 69
注: 一筆書き
いわゆるグラフの「一筆書き」問題は, 無向グラフの全ての「辺」を一度ずつ使う閉路 (オイラー閉路) のこと
ハミルトン閉路とは違うので注意 オイラー閉路が存在するか否かの判定は易しい (NP 完全ではない)
オイラー閉路が存在 ⇐⇒ 奇数次の頂点数が 0 または2
51 / 69
多項式時間還元の実例: 中級編
A poly−→ B において, 両者が実は似た問題だと気づくのに少し眼力を要する場合
VERTEX COVER poly−→ INDEPENDENT VERTEXSET
INDEPENDENT VERTEX SET poly−→ CLIQUE
52 / 69
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
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
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
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
3 つの問題の関連
G = ⟨V,E⟩ とする. 以下の 3 つは同値1. C が G の頂点被覆2. V − C が G の独立頂点集合3. V − C が G の補グラフGc のクリークを作る
55 / 69
補グラフグラフ G = ⟨V,E⟩ の「補グラフ」GC = ⟨V ′,E ′⟩ とは,
G と同じ頂点を持ち (V = V ′), G に枝がない頂点間およびそれらの間にのみ辺が存在する ((u, v) ∈ E ′ ⇐⇒ (u, v) ∈ E ′)
グラフグラフ (緑)とその補グラフ (赤)
a b
c
d
ef
56 / 69
関連の証明
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
VERTEX COVER poly−→ INDEPENDENT SET
もはや簡単な演習問題
58 / 69
INDEPENDENT SET poly−→ CLIQUE
もはや簡単な演習問題
59 / 69
ここまでのところ青字が取り上げた多項式還元
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
3SAT → VERTEX COVER 3SAT:
入力: 各節が 3リテラルから成るCNF (3CNF) 出力: 充足可能 (全体を真にするように変数へ真偽を割り当てられる) か否か?
用語復習: リテラル: xi または ¬xi 節: リテラル ∨ リテラル ∨ リテラル CNF: 節 ∧ 節 ∧ 節 ∧ 節 ∧ · · · 3CNF の例
(x0 ∨ ¬x3 ∨ x9) ∧ (¬x0 ∨ x4 ∨ ¬x13) ∧ . . .
VERTEX COVER: 入力: 無向グラフと整数 K 出力: K 個以内の頂点を選び, グラフの各辺の端点のどちらかは必ず選ばれているようにできるか?
61 / 69
3SAT の組み合わせ問題的な言い換え
E = (⃝∨⃝∨⃝)∧ (⃝∨⃝∨⃝)∧ (⃝∨⃝∨⃝)∧ · · · 全体を真にする ⇐⇒
1. 各節から少なくともひとつずつ (真にする) リテラルを選ぶ2. xi と ¬xi を同時には選べない
62 / 69
3SAT → VERTEX COVER考え方 (3SAT を VERTEX COVER に還元):
3SAT 問題の入力 E が与えられたとする それをもとにグラフ G と整数 K を「作る」 以下を満たすように
E が充足可能 ⇐⇒ グラフ G に K 頂点の頂点被覆が存在
( )( )( )( )
...
E G
63 / 69
3SAT → VERTEX COVER
1. 各リテラルにひとつ頂点を作り, xi と ¬xi を辺で結ぶ(リテラル頂点)
2. 節 l ∨ m ∨ n に対し, 図のような部分構造を作る(clause頂点)
...
64 / 69
3SAT → VERTEX COVER
1. 各リテラルにひとつ頂点を作り, xi と ¬xi を辺で結ぶ(リテラル頂点)
2. 節 l ∨ m ∨ n に対し, 図のような部分構造を作る(clause頂点)
( )
64 / 69
この部分構造のポイント この部分構造を被覆する最低数の頂点の選び方 (6 つの辺すべてから, どちらかの頂点を選ぶ) は本質的に 2 つある
1. 3 個の clause 頂点を選ぶ2. 3 個の clause 頂点と, (選ばれなかった clause 頂点と隣接する)1 個のリテラル頂点を選ぶ
最低でも 2 個の clause 頂点を選ばなくてはいけないこと,最低 3 頂点選ばないと被覆できないこと各自を確かめよ
65 / 69
この部分構造のポイント この部分構造を被覆する最低数の頂点の選び方 (6 つの辺すべてから, どちらかの頂点を選ぶ) は本質的に 2 つある
1. 3 個の clause 頂点を選ぶ
2. 3 個の clause 頂点と, (選ばれなかった clause 頂点と隣接する)1 個のリテラル頂点を選ぶ
最低でも 2 個の clause 頂点を選ばなくてはいけないこと,最低 3 頂点選ばないと被覆できないこと各自を確かめよ
65 / 69
この部分構造のポイント この部分構造を被覆する最低数の頂点の選び方 (6 つの辺すべてから, どちらかの頂点を選ぶ) は本質的に 2 つある
1. 3 個の clause 頂点を選ぶ2. 3 個の clause 頂点と, (選ばれなかった clause 頂点と隣接する)1 個のリテラル頂点を選ぶ
最低でも 2 個の clause 頂点を選ばなくてはいけないこと,最低 3 頂点選ばないと被覆できないこと各自を確かめよ
65 / 69
この部分構造のポイント この部分構造を被覆する最低数の頂点の選び方 (6 つの辺すべてから, どちらかの頂点を選ぶ) は本質的に 2 つある
1. 3 個の clause 頂点を選ぶ2. 3 個の clause 頂点と, (選ばれなかった clause 頂点と隣接する)1 個のリテラル頂点を選ぶ
最低でも 2 個の clause 頂点を選ばなくてはいけないこと,最低 3 頂点選ばないと被覆できないこと各自を確かめよ
65 / 69
この部分構造のポイント この部分構造を被覆する最低数の頂点の選び方 (6 つの辺すべてから, どちらかの頂点を選ぶ) は本質的に 2 つある
1. 3 個の clause 頂点を選ぶ2. 3 個の clause 頂点と, (選ばれなかった clause 頂点と隣接する)1 個のリテラル頂点を選ぶ
最低でも 2 個の clause 頂点を選ばなくてはいけないこと,最低 3 頂点選ばないと被覆できないこと各自を確かめよ
65 / 69
この部分構造のポイント この部分構造を被覆する最低数の頂点の選び方 (6 つの辺すべてから, どちらかの頂点を選ぶ) は本質的に 2 つある
1. 3 個の clause 頂点を選ぶ2. 3 個の clause 頂点と, (選ばれなかった clause 頂点と隣接する)1 個のリテラル頂点を選ぶ
最低でも 2 個の clause 頂点を選ばなくてはいけないこと,最低 3 頂点選ばないと被覆できないこと各自を確かめよ
65 / 69
これを全ての節に対して行い, グラフ G を作る n 変数, m clause の CNF に対し, K = n + 2m とする
例: (¬x0 ∨ x1 ∨ x4) ∧ (¬x1 ∨ ¬x3 ∨ x4) ⇒
...
66 / 69
E が充足可能 → G に (n + 2m) 頂点の被覆が存在実際以下の頂点を選べばそれは G の頂点被覆になっている
各 clause で真になったリテラルに相当するリテラル頂点(n 個)
各 clause で真にならなかった (≤ 2 個の) リテラルに隣接する clause 頂点 (≤ 2m 個)
...
67 / 69
G に (n + 2m) 頂点の被覆が存在 → E が充足可能 (1)観測: G を被覆するには,
先に注意したとおり, 互いに隣接する 3 個の clause 頂点から 2 個は選ばなくてはならない ≥ 2m
また明らかに, 隣接する 2 個のリテラル頂点から, 1 個は選ばなくてなならない (= n)
...
68 / 69
G に (n + 2m) 頂点の被覆が存在 → E が充足可能 (2)
よって, (n + 2m) 頂点の被覆は必然的に リテラル頂点を n 個, clause 頂点から 2m 個,
という選び方になる そこで (n + 2m) 頂点の被覆に含まれる頂点のうち, リテラル頂点 (必然的に n 個) に相当するリテラルを真にすれば, E は明らかに充足される
...
69 / 69
興味が湧いちゃった人は
Michael Garey and David Johonson. Computers andIntactability. http://www.amazon.co.jp/Computers-Intractability-Np-Completeness-Mathematical-Sciences/dp/0716710455
岩田茂樹. NP 完全問題入門
70 / 69