情報システム基盤学 基礎 1 アルゴリズムとデータ構造
DESCRIPTION
情報システム基盤学 基礎 1 アルゴリズムとデータ構造. Elements of Information Systems Fundamentals1. アルゴリズムとデータ構造 第 7 回 難しい問題. 目次. 難しい 問題の解き方 バックトラック法 分枝限定法 Complexity Theory( 計算量理論 ) 問題の難易度によるクラス分け クラス P とクラス NP NP 完全問題 多項式時間帰着. 難しい問題. これまで扱って来た問題 ソーティング、 最短経路問題 、 最小全域木 文字列照合 多項式時間アルゴリズムを容易に作れない問題 - PowerPoint PPT PresentationTRANSCRIPT
情報システム基盤学 基礎1
アルゴリズムとデータ構造
Elements of Information Systems Fundamentals1
1
アルゴリズムとデータ構造 第7 回
難しい問題
目次
難しい問題の解き方 バックトラック法
分枝限定法 Complexity Theory( 計算量理論 )
問題の難易度によるクラス分け クラス P とクラス NP NP 完全問題 多項式時間帰着
2
難しい問題 これまで扱って来た問題
ソーティング、 最短経路問題、最小全域木 文字列照合
多項式時間アルゴリズムを容易に作れない問題 しらみつぶし的な解探索が必要
高速化技法 バックトラック法 分枝限定法 3
多項式時間アルゴリズム存在( k を定数として , ) O(nk) 時間のアルゴリズム
n queen problem(n 女王問題 ) 入力:
1. チェス盤面のサイズ 現実のチェス盤面 8x8 の一般化
2. n 個のクイーンの駒 利き筋
8方向:縦、横、ななめ
出力: n 個のクイーンが互いに利き筋に当たらないよ
うな駒の置き方をすべて求める
4
単純なしらみつぶし解法 実際に n 個のクイーンを配置して、制約条件
を チェック
generate and test 法
調べる解の個数 1つの行または列には 1 個のクイーンしか置
けない ⇒それでも
5
解を生成してからチェック
バックトラック法:実用上、調べる解の個数を大幅削減
解の個数が n! になる理由 1 列目: n 行のどこでもおける 2列目:選択肢 n-1
1列目に選択されていない行における 3列目:選択肢 n-2
1,2 列目で選択されていない行
6
1 2 3 4 5 6 7 8
列番号
行番号
1
2
3
4
5
6
7
8
解の数: n x (n-1) x (n-2) x ...... x 2 x 1 = n!
しらみつぶし解探索における解集合
木として表現できることが多い 一般のグラフになってしまうこともある⇒難易度 UP
7
1 2 3 4
2 3 4 1 3 4
.......
3 4 2 4
.......
4 3 4 2
.......
n! の解を調べる=探索木の葉をすべて訪れる
木の深さ優先探索木の幅優先探索の出番
n=4
バックトラック法 しらみつぶし的な解探索での高速化技法 アイデア:
深さ優先探索ですべての葉を訪問しない 木を降りても解がないと判明した時点で木を引き返す
(バック) Pruning ( 枝刈り )
バックトラック法が使える条件 解を逐次的( incremental )に作成できる
解をステップごとに段階的に (stepwise に ) 作れる
8
部分解で解が制約条件を満たすか評価
9
1 2 3 4
2 3 4 1 3 4
.......
3 4 2 4
.......
4 3 4 2
.......
1列目:第1行に配置2列目:第3行に配置
1列目:第1行に配置2列目:第2行に配置
行番号
1 2 3 4 5 6 7 8 列番号
打ち切り
探索継続(n-2)! 個の解チェックをさぼれた
(n-3)! 個の解チェックをさぼれた
1
2
3
4
5
6
7
8
10
1 2 3 4
2 3 4 1 3 4
.......
3 4 2 4
.......
4 3 4 2
.......
1列目:第1行に配置2列目:第3行に配置
1列目:第1行に配置2列目:第2行に配置
行番号
1 2 3 4 5 6 7 8
1
2
3
4
5
6
7
8
列番号
打ち切り
探索継続(n-2)! 個の解チェックをさぼれた
(n-3)! 個の解チェックをさぼれた
11
ans: 部分解 // グローバル変数定数N: 解を構成する際のステップ数
Backtrack(int level) if(level==N) ans を解として出力 // if(ans が解になったら ) else { for( 第 level+1 ステップでの選択肢 p){ ans = ans に p を追加した部分解 ; // 木を降りる if(ans が制約条件を壊していない ){ Backtrack(level+1); // 探索継続 } ans を元に戻す ; // 探索木を上がる } }
MAIN() ans = Backtrack(0);
バックトラック法の流れ
• 探索木を完全に作らない• 必要に応じて探索木を展開• メモリ使用量、計算量を削減
12
ans=0
level
1 2 3 41 ans={1}
2 3 42ans={1,2}
2 43
ans={1,3}
ans={1,3,2}
13
定数 n : 盤面の 1 行のマス数int a[1...n]; // 解を格納する変数boolean h[1..n]; 行が空いているかどうかを表す論理変数boolean d1[1..2n-1]; 斜め列が空いているかどうかを表す論理変数boolean d2[1..2n-1]; 斜め列が空いているかどうかを表す論理変数
MAIN() for() a[i] = for () h[i]=true: for(1) d1[i] =true; for () d2[i]=true: Backtrack(0);
N queen problem のバックトラック法による解法
14
9
10
11
12
13
14
15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
斜め列 d1 斜め列 d2
8
7
6
5
4
3
2
1
15
Backtrack(int level) int j; // 行番号 if(level==n) 解 (a[1],a[2],....,a[n]) を出力 else { for(){ if(h[j] && d1[j+level] && d2[n+level+1-j]{ // 利き筋かをチェック a[level+1] = j; h[j]=false; // 使用済にする ( jの選択による状態変更 ) d1[j+level]=false; d2[n+level+1-j]=false; Backtrack(level+1); // 探索継続
h[j]=true; // j を選択前の状態に戻す d1[j+level]=true; d2[n+level+1-j]=true; } } }
メモリ消費量: O(n)• 再起呼び出しの深さは最大 n+1
分枝限定法( Branch and Bound ) 最適化問題をバックトラック法で解く手
法 目的関数を最大化あるいは最小化する問題
枝刈り これまでに得られた最大値を超えないことが
判明したら木を降りるのをやめるこの判定自体が難しい
16
ナップサック問題 ナップサック 容量 品物の集合 ={m1,m2,...,mn}
vi: mi の価値 wi: mi の重さ
目的:ナップサックに入れる品物の価値を最大化 制約条件:入れた品物の重さの合計
(重さあたりの価値 ) が大きい品物を入れるのが得
17
m1 m2 m3 knapsack
価値 60 100 120
重さ( kg )
10 20 30 50
価値 /重さ 6 5 4
0-1ナップサック問題各商品mi を入れるか入れないかを判定
入れる⇒1 入れない⇒ 0
しらみつぶしで調べる解の個数 2択が n 回
18
貪欲法が最適解にならない
0-1ナップサック問題の解集合 高さ n の2分木として表現可
19
0 1
0 1
.......
商品1の選択
0 1
0 1 0 1 0 1
商品2の選択
商品 3 の選択
商品 n の選択
:.......
s1=1, s2=1, s3=0
分枝限定法の枝刈り これまでに得られた最大値を超えないこ
とが判明したら木を降りるのをやめる
が選択 が選択されない
残ったナップサック問題 品物の集合 ナップサックの容量 W-
20
∑𝑗=1
𝑖
𝑠 𝑗𝑣 𝑗+残ったナップ サック問題への最適解 ≤𝐶max
これを求めるのは困難
m2m1 残りの問題
W
ナップサック
選択済みの商品の価値
解決策 枝刈り効率が若干下がるのを容認 高速計算可能な近似値を利用
O(n) で計算可能 近似値が満たすべき条件: 真の最適値より大き
い
21
∑𝑗=1
𝑖
𝑠 𝑗𝑣 𝑗+残ったナップサック問題への最適解≤𝐶max
∑𝑗=1
𝑖
𝑠 𝑗𝑣 𝑗+残ったナップサック問題の最適 解の近似値≤𝐶max
枝刈りに関する近似値の条件 枝刈り不可のケース
近似値<最適解⇒ 枝刈り不可なのに枝刈り正解を見落とす可能性あり
近似値>最適解⇒ 枝刈り不可22
∑𝑗=1
𝑖
𝑠 𝑗𝑣 𝑗+残ったナップサック問題への最適解≤𝐶max
∑𝑗=1
𝑖
𝑠 𝑗𝑣 𝑗+残ったナップサック問題の最適 解の近似値≤𝐶max
8040 真の最適解 42⇒ 枝刈り不可
80403545
枝刈りに関する近似値の条件 枝刈り可能なケース
近似値<最適解⇒ 枝刈り可能近似値 > 最適解⇒ 枝刈り可能なのに枝刈りし
ない 枝刈り効率低下。正解の見落としはないのでOK。
23
∑𝑗=1
𝑖
𝑠 𝑗𝑣 𝑗+残ったナップサック問題への最適解≤𝐶max
∑𝑗=1
𝑖
𝑠 𝑗𝑣 𝑗+残ったナップサック問題の最適 解の近似値≤𝐶max
8040 真の最適解 35⇒ 枝刈り可能
8040 3245
解決策 枝刈り効率が若干下がるのを容認 高速計算可能な近似値を利用
O(n) で計算可能 近似値の条件: 真の最適値より大きい
24
∑𝑗=1
𝑖
𝑠 𝑗𝑣 𝑗+残ったナップサック問題への最適解≤𝐶max
∑𝑗=1
𝑖
𝑠 𝑗𝑣 𝑗+残ったナップサック問題の最適 解の近似値≤𝐶max
有理ナップサック問題の最適解を採用
各商品mi をどれだけ入れるかを決定 0 入れる量
貪欲アルゴリズムが最適解1. 重さあたりの価値が最大の品物を入れるだけ入れる2. ナップサックに空きがあれば、重さあたりの価値が次に大きい品
物を入れる
m1:10kg, m2: 20kg, m3:20kg ⇒ 価値 60+100+ 20x4= 240, 最適
25
有理ナップサック問題
m1 m2 m3 knapsack
価値 60 100 120
重さ (kg) 10 20 30 50
価値 /重さ 6 5 4
ナップサック
m2m1 m3
O(n) で計算可能
2つの問題の解空間の関係 0-1 問題の解空間は有理問題の解空間の一部⇒ 有理問題の最適解 0-1 問題の最適解
26
0-1ナップサック問題
有理ナップサック問題
緩和 (Relaxation)制約条件を緩めた緩和問題の解から元の問題の近似値を得る技法⇒ 元の問題の最適解を得る手がかりとする
27
BandB(int i, value , weight ) if(i==n+1) Cmax = max{value,Cmax}; // 葉に到達 else { r= に対する有理ナップサック 問題の最適解 if( value+ r > Cmax) //mi を選択 if(<=weight) BandB(i+1, value+, weight-); if(value + r > Cmax) //mi を選択しない BandB(i+1, value, weight); }
Main() 商品を重さあたりの価値が高い順に並べ替え Cmax = 0; BandB(1, 0, W);
分枝限定法による 0-1ナップサック問題の解法
{𝑚𝑖 ,𝑚𝑖+1 ,…,𝑚𝑛 }
Cmax増加の可能性あり
選択済みの商品の価値
28
例題m1 m2 m3 m4
価値 16 22 12 8
重さ 5 7 4 3
3.2 3.14 3 2.68
ナップサックの容量W=14
29
1 m 1
商品 n の選択
:
value = 0, Weight=14,
value = 16, Weight=9,
m1 m2 m3 m4
価値 16 22 12 8
重さ 5 7 4 3
value = 38, Weight=2 1
0 value = 38, Weight=2,
0 Cmax =38
m2
m3
m4
Cmax=0近似解 =44
近似解 =28
近似解 =6
近似解 =16/3
value = 38, Weight=2,
30
1 m 1
商品 n の選択
:
value = 0, Weight=14,
value = 16, Weight=9,
m1 m2 m3 m4
価値 16 22 12 8
重さ 5 7 4 3
value = 38, Weight=2 1
0 value = 38, Weight=2,
0
m2
m3
m4
Cmax=38近似解 =44
近似解 =28
近似解 =6
近似解 =16/3
value = 38, Weight=2,
0 value = 16, Weight=9,
近似解 =20
0 value = 0, Weight=14,近似解 =42
31
BandB(int i, value , weight ) if(i==n+1) Cmax = max{value,Cmax}; else { if(<=weight) BandB(i+1, value+, weight-);
if(i<n) r= に対する weightを限界とする 有理ナップサック問題の最適解 else r=0 if( value+ r > Cmax) BandB(i+1, value, weight); }
Main() 商品を重さあたりの価値が高い順に並べ替え Cmax = 0; BandB(1, 0, W);
分枝限定法による 0-1ナップサック問題の解法(別実装)
{𝑚𝑖+ 1,𝑚𝑖+2 ,…,𝑚𝑛}
mi を選択しない時のみチェック
目次
難しい問題の解き方 バックトラック法
分枝限定法 Complexity Theory( 計算量理論 )
問題の難易度によるクラス分け クラス P とクラス NP NP 完全問題 多項式時間帰着
32
問題の難易度によるクラス分け(Complexity Class)
33
多項式時間アルゴリズムが知られている問題(クラス P )
指数時間かかることが判明している問題
解の検証は多項式時間でできるが , 解を求める多項式時間アルゴリズムが知られていない問題(クラスNP )3SAT, 最大クリーク , ハミルトンサイク
ル , TSP0-1ナップサック問題
グラフの全ての部分木を列挙
最短経路問題 , 最小全域木問題 , ソート
( k を定数として , ) O(nk) 時間のアルゴリズム
クラス分けの重要性
問題の難易度により適切なアルゴリズムデザインは変化
1. クラス P: しらみつぶしに解くのは効率が悪い
2. 難しい最適化問題(クラス NP 完全) 多項式時間最適アルゴリズムの設計は無駄
動的計画法 しらみつぶし的解法(分枝限定法) 近似解で我慢 34
なぜ多項式時間を重要視するのか ?
35
多項式時間と指数時間の差はすごく大きい
アルゴリズム A (多項式時間アルゴリズム)
アルゴリズム B (指数時間アルゴリズム)
500・ n3 回の命令を使用
n 個のデータ
アルゴリズムA
アルゴリズムA
答え
2n 回の命令を使用
アルゴリズムB
アルゴリズムB
n 個のデータ
答え
1秒間に 1億回の命令を実行できる計算機と使うと …データ
数 10 20 30 40 50 60 70 80
A ( poly )
5/1000 秒 40/100 秒 0.13秒 0.32秒 0.62秒 1秒 1.7秒 2.5秒
B ( exp )
1/10万 秒 1/100 秒 11秒 3 時間 130日 371年 37万年 4億年
問題のタイプ
36
最適化問題
判定問題
数え上げ問題
探索問題
グラフ G と 2 点 u, v と定数 k が与えられたとき ,u, v 間に長さ k 以下の道があるか?
グラフ G と 2 点 u, v が与えられたとき ,u, v 間の最短距離を求めなさい
グラフ G と 2 点 u, v と定数 k が与えられたとき ,u, v 間の長さ k の道の個数を求めなさい
グラフ G と 2 点 u, v と定数 k が与えられたとき ,u, v 間の長さ k 以下の道を 1本求めなさい
u
v
計算量理論では判定問題を考える
判定問題と最適化問題の関係 1/2
37
判定問題 を多項式時間で解くアルゴリズムがある
最適化問題 を多項式時間で解くアルゴリズムがある
最短距離の例:
判定問題
u, v 間に長さ k 以下の道があるか?
最適化問題
u, v 間の最短距離を求めなさい
グラフ G と 2 点 u, v と定数 k が与えられたとき ,
判定問題を多項式時間で解くアルゴリズムがあれば ,それを繰り返し適用して最適化問題を解ける
( k=0 のとき , k=1 のとき , … )
判定問題が解ければ ,最適化問題も解けるかな ?
判定問題と最適化問題の関係 2/2
38
判定問題 を多項式時間で解くアルゴリズムがある
最適化問題 を多項式時間で解くアルゴリズムがある
最短距離の例:
判定問題
u, v 間に長さ k 以下の道があるか?
最適化問題
u, v 間の最短距離を求めなさい
グラフ G と 2 点 u, v と定数 k が与えられたとき ,
最適化問題を解くアルゴリズムがあれば ,それを使って最適解を求め , k と比較すればよい
最適化問題が解ければ ,判定問題も解けるかな ?
判定問題だけ考えても差し支えない
クラス P と クラス NP
39
クラス P ( complexity class P )多項式時間で解くことができる判定問題の集合
クラス NP ( complexity class NP )
決定性( deterministic )チューリング機械上で , 多項式時間( polynomial )で解ける問題からなる集合
違う言い方をすると
解が与えられた時 , 多項式時間で検証できる判定問題の集合
非決定性( non-deterministic )チューリング機械上で , 多項式時間( polynomial )で解ける問題からなる集合
違う言い方をすると
注 : 厳密な定義ではありません ⇒ 詳しくは計算量理論を勉強すべし! 簡単のため , 本講義では , 上のように考えてください
クラス P と クラス NP の包含関係
40
クラス P ( complexity class P )多項式時間で解くことができる判定問題の集合
クラス NP ( complexity class NP )解が与えられた時 , 多項式時間で検証できる判定問題の集合
P が NP に含まれるのは明らかでも , P = NP かどうか分からない
NP
P
P=NP
見やすさを考慮して ,わざとずらして書いてます
または
100万ドルの懸賞金 !!!http://www.claymath.org/millennium/P_vs_NP/ を参照
NP 完全 (NP-complete)
41
判定問題 A が次の 2 つを満たすなら “ A は NP 完全である” という
1. A は NP に属す2. A が多項式時間で解けるならば , NP に属する全ての問題が多項式時間で解ける
NP A
イメージ的には下図のようになる
問題 A を解くのは難しそう…
( NP-Complete )
難度
P
一言でいうとNPの中で最も難しい問題
NP 完全
NP 完全性の証明
43
判定問題 A が NP 完全であるかの見極めるのは大切
1. A は NP に属す2. A が多項式時間で解けるならば , NP に属する全ての問題が多項式時間で解ける
NP A
難度
P
NP 完全
NP 完全であれば多項式時間で厳密には解くのは困難
• 動的計画法、しらみつぶし的解法• 近似解で我慢
2を示すのはすごく大変…
「ある問題が NP 完全であること」を利用すればもう少しだけ楽に証明できる(後述)
でもどんなもの
があるのか ?
NP 完全問題の例
44
SAT (論理式の充足可能性問題 , Satisfiability Problem )一番最初に NP 完全であることが証明された
問題
Input:Output:
m 個の和の節の AND
真にする割り当てはあるか?( Yes or No )
n 個の論理変数 ⇒ x1, x2, … , xn ( xi = 0 or 1 )xi のリテラル⇒ xi と xi リテラルの和の節⇒ リテラルを OR (∨)でつなげた論理式 C = x1 ∨ x2 ∨ x4 ∨ x6 例
:SAT
C1 C2 C3 .... Cm
SAT の例題
45
Input:Output:
m 個の和の節の AND
真にする割り当てはあるか?( Yes or No )
SAT
C1 = x1 ∨ x2 ∨ x3
C2 = x2 ∨ x3
C3 = x2 ∨ x3
4 個の和の節を全て 1にする 割り当てはあるか ?
C4 = x2
真理値表を書いてみる
x1 x2 x3 C1 C2 C3 C40 0 00 0 10 1 00 1 11 0 01 0 11 1 01 1 1
1 1 0 10 1 1 11 1 1 01 0 1 01 1 0 11 1 1 11 1 1 01 0 1 0
(入力例)
C1 C2 C3 .... Cm
SAT の NP 完全性
46
SAT は NP 完全である
Cook が証明したこと
1. SAT は NP に属す2. SAT が多項式時間で解けるならば , NP に属する全ての問題が多項式時間で解ける
SAT は NP 完全である つまり
本講義で証明はしません詳しくは計算理論を勉強しましょう
1971年に Cook によって証明されたStephen A. Cook ( Univ. of Toronto, Canada )“ The Complexity of Theorem-Proving Procedures”Proc. of the 3rd annual ACM Symposium of Theory of Computing, pp151-158.
NP SAT
NP 完全性の証明
47
「 SAT が NP 完全であること」を利用すれば , 比較的楽に(とは言っても難しい)他の問題が NP 完全であることを示せる
2. SAT が多項式時間で解けるならば , NP に属する全ての問題が多項式時間で解ける
SAT は NP 完全である
多項式時間帰着
つまり
ある問題 B が NP 完全であることを示すためには
2. 「 B が多項式時間で解けると SAT も多項式時間で解ける」ということを示す
1. 「 B は NP に含まれる」を示す(比較的簡単) ,
NP
SAT
B
多項式時間帰着
SAT から問題 B への多項式時間帰着
• SAT の任意のインスタンス s を , 問題 B のインスタンス b に変換する多項式時間アルゴリズムの存在を示す
• s の答えと , b の答えは必ず一致
ある問題 B が NP 完全であることを示すためには
もうちょっと具体的には ?
2. について インスタンス:問題例
2. 「 B が多項式時間で解けると SAT も多項式時間で解ける」ということを示す
1. 「 B は NP に含まれる」を示す(比較的簡単) ,
多項式時間帰着の原理SAT の任意のインスタンス s を , 問題 B のインスタンス b
に変換する多項式時間アルゴリズムが存在• s の答えと , b の答えは必ず一致
問題 B を多項式時間で解くアルゴリズム• SAT のインスタンス s を変換した b を多項式時間で
解く• b の答えと s の答えは一緒 ⇒ s の答えはわかる
⇒ 問題 B を多項式時間で解くことは難しい !!
SAT のインスタンス
Bのインスタンス
変換アルゴリズ
ム
(多項式時間)
B が多項式時間で解けると SAT も多項式時間で解ける
多項式時間帰着の広がり
50
NP
SAT
SAT からの多項式時間帰着により , 問題 B が NP 完全であるこ
と ,問題 C が NP 完全であることが示せた問題 B からの多項式時間帰着によ
り , 問題 E が NP 完全であること ,問題 F が NP 完全であること ,
問題 G が NP 完全であることが示せた
B
C
E
F
G
数千もの問題についてNP 完全性が示されている
3SAT, CLIQUEVERTEX-COVERSUBSET-SUMHAM-CYCLE, TSP
代表例 :
H
I
多項式時間帰着の向き
多項式時間帰着の一例 :3SAT CLIQUE⇒
51
3SAT が NP 完全であるということが分かっている前提で ,
CLIQUEInput :Output :
グラフ G, 整数 k
G中に , サイズ k のクリークがあるか ?
※クリーク: どの 2頂点間にも 辺がある部分グラフ
k = 4
入力例
「 CLIQUE が NP 完全である」ことを示
す 3SAT
Input :
Output :
リテラル xi, xi (i=1,…,n) から ,3 つのリテラルを使って構成した和の節が m 個全ての節を 1 にする割当ある ?
制限付きの SAT 問題各節は必ず 3 つのリテラルの和からなる
C1 = x1 ∨ x2 ∨ x3
C2 = x1 ∨ x2 ∨ x3
C3 = x1 ∨ x2 ∨ x3
入力例
CLIQUE の NP 完全性を証明
1. CLIQUE は NP に属す2. CLIQUE が多項式時間で解けるならば , NP に属する全ての問題が多項式時間で解ける
グラフ G = ( V, E ) と , 頂点の部分集合 V’ が与えられたとするV’ が G 中でクリークになっているかどうかチェックしたい「多項式時間でできる ?」
YES
やり方v V’ ∈ から V’ 中の各頂点への辺があるかどうかチェック1頂点につき O(n) 時間 ⇒ 全頂点で O(n2) 時間
a
b
h
i
c
g
d
f
e
V’
G=(V,E)
52
CLIQUE の NP 完全性を証明
53
1. CLIQUE は NP に属す2. CLIQUE が多項式時間で解けるならば , NP に属する全ての問題が多項式時間で解ける
ある NP 完全な問題から多項式時間帰着を示す(今回は 3SAT からの帰着)
NP
3SAT
CLIQUE
3SAT の任意のインスタンス s を , Clique のインスタンス b
に変換する多項式時間アルゴリズムを示す• s の答えと , b の答えは必ず一致
1. s が yes ならば b も yes
2. s が no ならば b も no 待遇: b が yes ならば s も yes
3SAT CLIQUE ⇒ への変換
54
3SAT の任意のインスタンス
CLIQUE のインスタンス変換
変換のやりかた各節に対し , 1 つのリテラルを 1頂点に置き換え
3SAT のインスタンス例:
C1 = x1 ∨ x2 ∨ x3
C2 = x1 ∨ x2 ∨ x3
C3 = x1 ∨ x2 ∨ x3
変換
x1
x2
x3
x1 x2 x3
x1
x2
x3
C1
C2 C3
対応する CLIQUE のインスタンス:
次の 2 条件を満たす 2頂点を辺でつなぐ1. 異なる節に属
す2. 互いに否定の関係でない k = 節数
(今は3 )
節数を k とする
「 3SAT の答えが YES → 対応する CLIQUE の答えが YES」を示す
3SAT を YES にする解→ 各節に , 少なくとも 1 つは真のリテラルを含むそのようなリテラルに対応する頂点を各節から 1 つずつ、計 k 個選ぶ選ばれた頂点間には辺が必ず存在⇒クリークを構成する
辺の両端のリテラルは同時に真にできる
3SAT CLIQUE ⇒ への変換
55
3SAT の任意のインスタンス
CLIQUE のインスタンス変換
変換のやりかた各節に対し , 1 つのリテラルを 1頂点に置き換え
3SAT のインスタンス例:
C1 = x1 ∨ x2 ∨ x3
C2 = x1 ∨ x2 ∨ x3
C3 = x1 ∨ x2 ∨ x3
変換
x1
x2
x3
x1 x2 x3
x1
x2
x3
C1
C2 C3
対応する CLIQUE のインスタンス:
次の 2 条件を満たす 2頂点を辺でつなぐ 1. 異なる節に属
す2. 互いに否定の関係でない k = 節数
(今は3 )
節数を k とする
「 3SAT の答えが YES ←対応する CLIQUE の答えが YES」を示すCLIQUE の答えが YES→ グラフはサイズ k のクリークをもつ
• クリークに含まれる k 個の頂点に対応するリテラルは同時に真にできる(辺の2端点は同時に真にできるから)
• しかも k 個のリテラルは異なる節に属する⇒ C1 、 C2 、 ......, C kは同時に真にできる⇒ 3SAT が YES
辺の両端のリテラルは同時に真にできる
56
証明終了 SAT のインスタンス s を , Clique のインスタン
ス b
変換する多項式時間アルゴリズムが存在 s の答えと , b の答えは必ず一致
CLIQUE を解くアルゴリズムを使って , 3SAT を解ける
SAT のインスタンス
Clique のインスタンス
変換アルゴリズ
ム
(多項式時間)
Clique が多項式時間で解けると 3SAT も多項式時間で解ける⇒ Clique はNP完全
余談 1: NP 完全問題は難しい
57
1971年以降 , 世界中の研究者がトライしても解けない1億円の懸賞金がかかるほど
こんなアンケートもあったそうです
P vs. NP 問題はいつまでに解かれると思いますか ?2071年(生誕 100周年)まで :
61人3000年まで : 13人永遠に解けない : 6人
専門家 100人に聞きました
W. Gasarch, “Guest column: The P=?NP poll”, SIGACT NEWS 33, 2, (2002), 34--47
From
余談 1: NP 完全問題は難しい
58
1971年以降 , 世界中の研究者がトライしても解けない1億円の懸賞金がかかるほど
こんなアンケートもあったそうです専門家 100人に聞きました
W. Gasarch, “Guest column: The P=?NP poll”, SIGACT NEWS 33, 2, (2002), 34--47
From
どのような結論が出ると思いますか ? P≠NP: 61人
P=NP: 9人わからない : 22人
社会的に重要な問題を含むからTSP (巡回セールスマン問題) , ハミルトンサイクル
余談 2:それでも NP 完全問題を解きたい…
59
効率よく解けないからといってあきらめるわけにはいかない
厳密アルゴリズム指数時間かかってもいいから最適解を計算近似アルゴリズム最適解ではないけど , 最適解に近い解を多項式時間で計算発見的アルゴリズ
ム理論的保証はないけれども , うまくいく方法を探る入力を制限入力に条件を加えて最適解を与える
Tarjan-Trojanowski(1977) O(20.333n)
Jian(1986) O(20.304n)
Robson(1986) O(20.298n)
Beigel(1999) O(20.2904n)
Fomin(2006) O(20.288n)
中西 , 富田 (2007) O(20.19669n)
中西 , 富田 (2008) O(20.19171n)
最大クリークを求めるアルゴリズム
第4回:レポート課題
n queen problem に対するアルゴリズムを実装しなさい。 バックトラック法を実装し、 n を変えて実行時間を調べ
なさい。レポートには解は記載する必要はなく、解の数を回答すればよい どこまで n を大きくできるかチャレンジ !
授業で紹介したアルゴリズムは基本中の基本。改良の余地あり
出題: H25年5月29日締切: 6月26日提出先: IS棟2F事務ポスト(コード、実行結果をA4で提出。プログラムにコメントも付けること。)
60