第7回: 5月29日

Download Report

Transcript 第7回: 5月29日

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