宮崎修一
京都大学 学術情報メディアセンター
アルゴリズム入門( 7 )
(問題の複雑さ)
2
ある問題が、「これだけの計算量で解ける」というのを示すのは、
比較的簡単。(実際にアルゴリズムを設計すれば良い。)
ある問題が、「これだけの計算量では解けない」ことを示すのは、
難しい。(「どんなアルゴリズムでも駄目だ」ということを証明する 必要がある。)
問題の難しさ
今の所、問題の難しさを示す研究は、成功していない。
↓
問題の難しさを示すために、「ある問題が難しいとすると、
この問題も難しい」という論法が使われている。
3
A:既に難しいことが分かっている問題。
B:難しいことを示したい問題。
問題の難しさを示す手法(還元、リダクション)
問題A 問題B
還元
問題Aを問題Bに変換している(ただし、答が保存されるように)
つまり、Bを解くことにより、Aを解くことが出来る。
4
i
具体例
A:論理式の充足可能性問題(SAT) 難しいことが分かっている。
B:最小頂点被覆問題(VC) 難しいことを示したい。
SAT
入力:和積形論理式
f = (x
1+x
2+x
3) (x
1+x
8) … (x
3+x
6+x
7+x
12)
出力:
x , x , …, x
に0/1
を割り当てて、f =1
と出来るか?YES/NO?
x
:1 2 n
i
x
i の否定x
i=1
ならばx =0
x
i=1 x
i=0
ならば(x
1+x
2+x
3) x
1かx
2 かx
3 の少なくとも1
つが1
すべて0
=1
=0
5
x =1
f = (x
1+x
2) (x
1+x
3) (x +x ) (x
1+x
3)
だとf =1
にできる。( 1 )
1 2
x
2=1 x
3=0
f = (x
1+x
2) (x
1+x
2) (x +x ) (x
1+x
2)
だと、どうやってもf =1
にできない。1 2
SATの例
6
最小頂点被覆問題(判定問題版)
グラフ
G
と整数K
が与えられて、「
G
は頂点数K
以下の頂点被覆を持つか? YES/NO?」を問う。
K
=4YES
頂点の集合
C
で、どの枝も端点の どちらかがC
に属する。7
リダクションの概要
元の問題で
f =1
とできるK
個以下の頂点で被覆できる⇔
SAT VC
f (G, K)
YES/NO YES/NO
高速(多項式時間)
高速(多項式時間)
?
?のところが高速ならば、全体としてSATに対する高速な アルゴリズムが作れたことになる。
YES NO
YES NO
⇔ ⇔
つまり、
VC
に対する高速なアルゴリズムが存在すれば、SAT
に対する高速な アルゴリズムも存在することになる。逆に言えば、
SAT
を解く高速なアルゴリズムが存在しないならば、VC
を解く高速なアルゴリズムも存在しない。8
リダクションの概要
元の問題で
f =1
とできるK
個以下の頂点で被覆できる⇔
SAT VC
f (G, K)
YES/NO YES/NO
高速(多項式時間)
高速(多項式時間)
?
ポイント:
f
を解いて、YES
かNO
か分かった後で(G, K)
を作るのは 簡単にできる。しかし、
SAT
は難しい問題なので、f
を解くだけで指数時間かかる。f
を解かずに、答えが分からないまま「表面的な」変換だけで、YES/NO
を保存させることが出来るのがミソ。YES NO
YES NO
⇔ ⇔
9
リダクションの方法
f= (x
1+x
2+ x
3) (x
1+ x
5) (x
2+x
3+ x
4+x
6) … (x
8+ x
9+x
12)
c
1個c
2個c
3個c
m個x
1…
x
1x
2x
2x
3x
3x
4x
4x
5x
5x
nx
n…
K=n+(c
1-1)+(c
2-1)+…+(c
m-1)
10
元の問題で
f =1
とできるK
個以下の頂点で被覆できる…
⇔
どちらか1個選ばなければいけない。全部で
n
個K=n+(c
1-1)+(c
2-1)+…+(c
m-1) x
1…
x
1x
2x
2x
3x
3x
4x
4x
5x
5x
nx
nf= (x
1+x
2+ x
3) (x
1+ x
5) (x
2+x
3+ x
4+x
6) … (x
8+ x
9+x
12)
c
1個c
2個c
3個c
m個11
…
c
1-1個選ばなければならない
c
2-1個選ばなければならない
c
m-1個選ばなければならない
K=n+(c
1-1)+(c
2-1)+…+(c
m-1) x
1…
x
1x
2x
2x
3x
3x
4x
4x
5x
5x
nx
nf= (x
1+x
2+ x
3) (x
1+ x
5) (x
2+x
3+ x
4+x
6) … (x
8+ x
9+x
12)
c
1個c
2個c
3個c
m個元の問題で
f =1
とできるK
個以下の頂点で被覆できる⇔
12
…
この内部の枝はカバーできた。2
つの間を繋ぐ枝をどうカバーするかx
1…
x
1x
2x
2x
3x
3x
4x
4x
5x
5x
nx
nK=n+(c
1-1)+(c
2-1)+…+(c
m-1)
f= (x
1+x
2+ x
3) (x
1+ x
5) (x
2+x
3+ x
4+x
6) … (x
8+ x
9+x
12)
13
このうち、
3
頂点は選べるので、間の枝のうち、3
本は自動的にカバーできるx
2…
x
2x
3x
3x
4x
4x
5x
5これだけが残るので、
上でうまくカバー してくれると嬉しい
14
…
内部の枝はカバーできた。2
つの間を繋ぐ枝をどうカバーするかx
1=1 x
2=1 x
3=0
1 1
x
1…
x
1x
2x
2x
3x
3x
4x
4x
5x
5x
nx
nK=n+(c
1-1)+(c
2-1)+…+(c
m-1)
f= (x
1+x
2+ x
3) (x
1+ x
5) (x
2+x
3+ x
4+x
6) … (x
8+ x
9+x
12)
15
…
困るのはx
1=0 x
2=1 x
3=0
0 0 0
x
1…
x
1x
2x
2x
3x
3x
4x
4x
5x
5x
nx
nK=n+(c
1-1)+(c
2-1)+…+(c
m-1)
f= (x
1+x
2+ x
3) (x
1+ x
5) (x
2+x
3+ x
4+x
6) … (x
8+ x
9+x
12)
16
SAT
もVC
も、「難しい問題」として知られている。そういう問題が「
NP
完全問題」。多項式時間アルゴリズムが存在しないだろうと 思われている(が、まだ証明はされていない)。
グラフに関する
NP
完全問題は、VC
以外にも数限りなくある。・
k-
クリーク問題・
k-
独立頂点集合問題・
3
彩色問題・ハミルトン閉路問題
17
P
とNP
・
SAT
(入力:論理式f
)f
の全部の項を1
にする変数割り当てがある?YES? NO?
・最小頂点被覆問題(入力:グラフ
G
と整数k
)k
個の頂点を選んで、G
のすべての枝をカバーできる?YES? NO?
・最短経路問題(入力:重み付グラフ
G
、2
頂点s
とt
、整数k
)s
からt
まで、長さk
以下のルートがある?YES? NO?
・最小全域木問題(入力:重み付グラフ
G
、整数k
)G
から枝を選んで、重みの合計がk
以下の木を作れる?YES? NO?
ここでは、答えが
YES
かNO
を判定する判定問題だけを考える。つまり、これら
4
つの問題は、全てNP
に入る。 18NP: Yes
の入力に「答がYes
である証拠」が与えられたら、確かに
Yes
であることを多項式時間で検証できる。また、
No
の入力に「答がYes
である証拠」が与えられても、騙されない。
・
SAT
変数への
0/1
割り当てが与えられたら、それが全ての項を 充足するか否かを、多項式時間で検証できる。・最小頂点被覆問題
頂点集合が与えられたら、それが
k
個以下で、かつ、正しい被覆になっているか否かを、多項式時間で検証できる。
・最短経路問題
s
からt
へのルートが与えられたら、その長さがk
以下であるか 否かを、多項式時間で検証できる。・最小全域木問題
木が与えられたら、それが全域木で、その重みが
k
以下であるか否かを、多項式時間で検証できる。
19
P:
「答がYes
である証拠」が与えられなくとも、Yes
であることを(自力で)多項式時間で検証できる。
・最短経路問題
ダイクストラのアルゴリズムで最適解を求めて、それを
k
と比較すれば、多項式時間で
YES
かNO
か分かる。・最小全域木問題
クラスカルのアルゴリズムで最適解を求めて、それを
k
と比較すれば、多項式時間で
YES
かNO
か分かる。つまり、これら
2
つの問題は、P
に入る。SAT
やVC
がP
に入るかどうかは不明20
P
はNP
の部分集合NP
P
多項式時間アルゴリズムを持つ 問題の集合(易しい問題の集合)
・最短経路問題
・最小全域木問題 など
答を多項式時間で検証できる 問題の集合
・
SAT
・最小頂点被覆問題 など
P=NP
かP≠NP
かは まだ分かっていない。(多くの人が
P≠NP
だろうと 思っている。)21
有名な未解決問題
(
21
世紀の7
大未解決問題の1
つ)NP P
P≠NP
予想・「
NP
とP
は異なる、つまり、NP
に入るがP
に入らない問題が 存在する」という予想。・「与えられた答が正しい答であるかどうかの検証は簡単だが、
自分で答を見つけるのは難しい問題は存在する。」という 意味も持つ。
22
…
23
SAT VC
f (G, K)
YES/NO YES/NO
多項式時間
多項式時間
?
NP
完全性は、P vs NP
問題を解く有力な手掛かりSAT
からVC
へのリダクション(前出)これは、
VC
を解くアルゴリズムをサブルーチン(部品)として 使って、SAT
を解くアルゴリズムを構築していると解釈できる。「?」の部分が多項式時間⇒全体が多項式時間
VC
がP
に入る⇒SAT
がP
に入る24
問題
A
がNP
完全であるとは、(1) A
自身がNP
に入る。(2) NP
のどの問題からもA
にリダクション出来る。※
世の中のたくさんの(何千、何万という)実用的な問題が、NP
完全問題であるということが知られている。A
定義の意味は、次のスライドで。
25
好きな
NP
完全問題A
を選ぶ。・
A
がP
に入ることを示せば、P=NP
を示したことになる。リダクションの性質から、
NP
問題全てがP
に入る。A
なぜNP
完全性が、P vs NP
問題に関係している?・
A
がP
に入らないことを示せば、P≠NP
を示せたことになる。A
はNP
に入るのにP
に入らないから。つまり、
NP
は無数の問題を含んでいるが、P vs NP
問題を考える上では、何でも良いから ある1
つのNP
完全問題が多項式時間で解けるか否かに集中すれば良い。
26
A B C
A
に対する入力I
からB
に対する入力I’
を作るR
1R
2R
1 :B
に対する入力I’
からC
に対する入力I’’
を作るR
2 :R
R
:R
とR
を使って、A
に対する入力I
からC
に対する入力I’’
を作る。1 2
問題
A
がNP
完全であるのを示すとき、(1)
を示すのは難しくないが、(2)
は難しそうに思える。(NP
の問題は無限にあるから。)しかし、リダクションは推移的である。すなわち、
A
からB
にリダクション出来て、B
からC
にリダクション出来れば、A
からC
にリダクション出来たことになる。27
ある問題
X
がNP
完全だということを示せたとしよう。X
すると、問題
A
に対して(2)
を示すには、X
からA
へのリダクション を見つけさえすれば良い。なぜなら、前ページの議論より、全ての問題から(
X
を経由して)A
にリダクションできることになるから。A
最初に
NP
完全だということが示されたのがSAT
。それ以降は、
SAT
から芋づる式にリダクションして得られた。28
3
彩色問題のNP
完全性の証明(1) NP
に入ることは明らか。与えられた3
彩色に対して、どの枝を見ても、その両端の色が異なっていることを チェックするのは、多項式時間で出来る。
(2)
任意のNP
問題からリダクション出来ることについて。既に
NP
完全であることが分かっている3SAT
から リダクションする。f= (x
1+x
2+ x
3) (x
1+ x
5+ x
2) (x
3+ x
4+x
6) … (x
8+ x
9+x
12) SAT
の特殊なもの。各項に現れるリテラルの 数がちょうど3
のもの。3
個3
個3
個3
個29
x
1x
2x
nx
nx
2x
1f= (x
1+x
2+ x
3) (x
1+ x
5+ x
2) (x
3+ x
4+x
6) … (x
8+ x
9+x
12) x
3へ全ての項に対して同じように作る
v
0v
130
x
1x
2x
nx
nx
2x
12 0 1 1
1
0
0 0
1 1
x
i やx
i は0
か1
でしか塗れないx
i を0
、x
i を1
か、またはその逆しかない。前者を
x
i=0
、後者をx
i=1
と解釈する。v
1v
031
項に対応する部分
0 0 0
0
変数部分が全部
0
ならばここには
0
を使わざるを 得ない0 1 0
0
変数部分に
1
つでも1
があればここを
1
で塗れる(他の
6
つの場合も正しいことを確かめよ)
1 1
2
2
0
32
3SAT
の入力f
がYES
。→
全部の項を1
とする変数割り当てに従って、変数頂点を0
と1
で 塗る。→
それぞれの項に対応する部分グラフを0, 1, 2
で塗る。(どの項も、
1
となる変数が少なくとも1
つあるので、正しく塗れる。)
→ 3
彩色問題の入力G
がYES
。3
彩色問題の入力G
がYES
。→
全ての頂点を0, 1, 2
で正しく塗れる。→ v
が0
、v
が1
になるように、色を入れ替える。→
各項に対応する部分グラフの一番左にある3
頂点のうち、少なくとも
1
つは色1
で塗られている。→
変数頂点の色(0
または1
)に従って、f
の変数の0/1
割り当てを 決めると、各項少なくとも1
つは1
となる変数を含む。→ 3SAT
の入力f
がYES
。0 1
33