1 / 52

コンピュータアルゴリズム 2 11. 計算困難問題 ・ NP 完全問題 ・決定不能問題

コンピュータアルゴリズム 2 11. 計算困難問題 ・ NP 完全問題 ・決定不能問題. 田浦. http://www.logos.ic.i.u-tokyo.ac.jp /~tau/lecture/software/. Roadmap. 易しい問題 難しい ( 困難な ) 問題 NP 完全問題 NP, NP 困難 , NP 完全 NP 完全であることが意味すること 有名な NP 完全問題 NP 完全性の証明 決定不能問題. 易しい問題.

Download Presentation

コンピュータアルゴリズム 2 11. 計算困難問題 ・ NP 完全問題 ・決定不能問題

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. コンピュータアルゴリズム211. 計算困難問題・NP完全問題・決定不能問題 田浦 http://www.logos.ic.i.u-tokyo.ac.jp/~tau/lecture/software/

  2. Roadmap • 易しい問題 • 難しい(困難な)問題 • NP完全問題 • NP, NP困難, NP完全 • NP完全であることが意味すること • 有名なNP完全問題 • NP完全性の証明 • 決定不能問題

  3. 易しい問題 • 定義: 入力のサイズnに対して,nのある多項式で抑えられる( nk)時間で終了するアルゴリズムが存在する問題 • n : 入力の大きさ,k : nに無関係な定数 • クラスPに属する問題とも言う • P : Polynomial time • これまで述べてきた数々の問題(整列,探索,グラフの最短距離,etc.)はすべてクラスPに属する問題

  4. 言葉の慣習 • 多項式時間 • nのある多項式で抑えられる時間 • 注: この定義によれば n log n時間なども多項式 • 多項式時間アルゴリズム • 多項式時間で終了するアルゴリズム • バブルソート,クイックソート,マージソート,コンテナへの挿入,優先度キューへの挿入,Dijkstra, ... はみな多項式時間アルゴリズム • (ある問題が)多項式時間で解ける • それを解く多項式時間アルゴリズムが存在すること • つまり,クラスP = 多項式時間で解ける問題

  5. 計算困難な問題 • 定義: 易しくない問題 • つまり多項式時間アルゴリズムが存在しない問題 • 実践的意味: • 入力のサイズが少し大きくなると計算時間がかかりすぎて事実上解けない問題 • 注: 解法を思いつくことの難しさ(いわゆる人間にとっての問題の難しさ)とは別の概念

  6. 多項式でない計算時間の例 • 指数関数時間 • 2n, 1.3n, ... • 階乗 • n! • これらの計算時間は,しばしば,多くの可能性を「しらみつぶしにあたる」時に現れる

  7. 多項式でない計算時間を持つアルゴリズムの例多項式でない計算時間を持つアルゴリズムの例 • 問題: 充足可能性(SAT): ある命題論理式の解(式の値が真となる,変数への真偽値の割り当て)があるかどうか? • アルゴリズム: 0/1のすべての組み合わせ(2n通り. n : 未知数の数)を試す • 問題: k彩色(k-COLOR): グラフの頂点に,隣接(辺で結ばれた)頂点が同じ色にならないよう色を塗る.k色で塗れるか? • アルゴリズム: すべての色の塗り方(kn通り. n : 頂点の数)を試す • 問題: ナップサック(KNAPSACK): n個の整数と目標値bに対し, n個の中からいくつかを選んでその和=bとできるか? • アルゴリズム: 各整数を含めるか否かをすべて (2n通り)試す

  8. • 以上の議論は「多項式時間でないアルゴリズム」の例を示したもの • 以上でこれらの問題に「多項式時間アルゴリズムは存在しない(これらの問題は難しい)」と結論できるわけではない • 仮になかったとしても,上記よりよいアルゴリズムがない,と言っているのでもない(2nよりは1.84nの方がマシ)

  9. 難しいことが証明されている問題の例 • ネズミとネコのゲーム[岩田 NP完全問題入門] • 有向グラフの頂点上にチーズ一個,ネコ一匹,ネズミが多数いる • 交互にネコとネズミ(一匹)を隣の頂点に移動 • 一匹のネズミがチーズにたどり着けばネズミの勝ち

  10. NP完全問題 序論 • しかし,実用上現れる多くの問題は,易しいことも難しいことも証明されていない • 多項式時間アルゴリズムは見つかっていない • それが存在しないことも証明されていない • おそらく存在しないと信じられている • しかもそのような問題の多くがこれから述べる「NP完全問題」と呼ばれる問題であり,ある意味でどれも同程度に難しいことがわかっている • NP完全問題のどれか一つが易しいとわかればすべてのNP完全問題は易しく,その逆も然り

  11. NP完全問題の定義を理解し,ある問題がNP完全問題であることを証明する基本手法を身につけることは重要NP完全問題の定義を理解し,ある問題がNP完全問題であることを証明する基本手法を身につけることは重要 • 理由 • 実際にそのような問題がしばしば現れるから • 多数のNP完全問題が知られているため,ある問題がNP完全であることは容易にわかることが多いから • ある問題がNP完全とわかれば,その問題はたぶん,計算困難であることが示唆されるから • 近似解で我慢する • よくある入力に絞って経験則を用いる

  12. クラスNP (1) • NP : Non-deterministic Polynomial time (非決定的多項式時間) • 問題としては出力が1または0の2通りのもの(決定問題; decision problem)を考える • 「非決定的選択実行文」(複数の文から一つを実行する文)を持つプログラミング言語を考える • either S1 or S2 : S1またはS2のどちらかを実行 • NPの直感的説明 • この言語を使って多項式時間で終了するアルゴリズムが存在し, • 正解が1であるような入力に対しては「運がよければ」1を出力する • 「運がよければ」 = either S1 or S2で常に「よい」選択をすれば • 正解が0であるような入力に対しては「常に」0を出力する

  13. クラスNP (2) • 非決定的選択実行文を持つ言語で書かれたプログラムの • 出力は,すべての選択の中で1を返すものが一つでもあれば1, そうでなければ0, とする • 実行時間は,すべての選択の中で最大のもの,とする • ある問題がNPに属するとは, • その問題を解く,非決定的選択実行文を持つ言語で書かれたアルゴリズムが存在し, • 実行時間は入力の大きさnの多項式時間 こと S2 S1 S1 S2 多項式 ... 1 0 0 0 0 1 0 1

  14. 言葉の慣習 • 非決定的アルゴリズム • 非決定的選択実行文を持つ言語で書かれたアルゴリズム • 非決定的多項式時間アルゴリズム • 実行時間が入力の大きさnの多項式時間である非決定的アルゴリズム • 非決定的に多項式時間で解ける • ある問題を解く,非決定的多項式時間アルゴリズムが存在すること • つまりあらためて整理すると • クラスNP = 非決定的に多項式時間で解ける問題 • クラスP = 多項式時間で解ける問題

  15. • 多くの教科書・本では, • (プログラミング言語の代わりに)チューリングマシン, • (either S1 or S2という構文を持つプログラミング言語の変わりに)非決定的チューリングマシン • というマシンを用いてP, NPの定式化をする(本質的には同じこと)

  16. NPに属する問題の例 • 先にあげた SAT,k-COLOR, KNAPSACKなどがすべてNPに属することは容易にわかる • すべての組み合わせを試すかわりに「非決定的選択実行」に頼る • SAT (E) { /* E(x0, ..., xn–1) : 論理式 */ for (i = 0; i < n; i++) { either xi = 0 or xi = 1; } if (E(x0, ..., xn–1) == 1) return 1; else return 0;} x0 = 0 x0 = 1 x1 = 0 x1 = 1 n ...

  17. NPの別の直感的理解 • 以下を満たすような問題 • 「解候補」が与えられたとき,それが本当に解か(1を返すか)どうかを多項式時間で検査できる • 解候補の数が2多項式個程度 • 各々の解候補は多項式時間で生成できる • 「多項式」は入力の大きさの多項式の意味

  18. NPに関して容易にわかること • P  NP • 決定的に多項式時間で解けるなら非決定的に多項式時間で解ける • NP  EXPTIME • EXPTIME : 2多項式 時間で解ける問題の集合 • 非決定的に時間T(n)で解けたら,すべての非決定的選択実行 (高々 cT(n)回)において両方の可能性を試すことで,非決定的選択実行無しでも2cT(n)時間で解ける

  19. NPに関してわかっていないこと • P  NPか, 実は(意外にも) P = NP か? (P=NP問題, PNP予想) • NP  EXPTIMEか, 実は NP = EXPTIMEか?

  20. NP完全問題 PNP予想の可能な帰結 • 可能性1: PNPが証明される • 一つでよいから,NPに属する問題で「Pには属していない(多項式時間では解けない)ことが証明される」ものが見つかる • 可能性2: P=NPが証明される • NPに属するすべての問題が,実はPに属している(多項式時間で解ける)ことが証明される • 同じ事として,NPに属する問題の中で最も難しいものが,一つでよいから,実はPに属していることが証明される

  21. NP困難(NP-hard)問題,NP完全(NP-complete)問題 • NP困難 • 直感的意味: NPに属するどの問題よりも少なくとも同程度には難しい • NP完全 • NP困難であって,NPに属するもの • 直感的意味: NPの中で最も難しい

  22. NP困難の定義 A B • 定義: 問題 Aが Bに多項式時間で還元可能(polynomial-time reducible) • 問題Aの任意の入力 aをその大きさの多項式時間で,問題Bへの入力 b = f (a)に変換でき, • 「a に対する解 = f (a)に対する解」が成り立つ • 意味「Bが解ければAも解ける」「Bは少なくともAと同程度には難しい」 • 定義: 問題BがNP困難 • NPに属するどの問題もBに多項式時間で還元可能 NP B (NP-hard)

  23. NP完全 • NPでありかつNP困難である • NPの中で他のどの問題よりも少なくとも同程度に難しい NP B (NP-complete)

  24. NP困難性を証明する方法(1) • 一番最初にNP困難であることを証明するのは大変 • 文字通り「NPで解けるすべての問題」が,実はその問題を解く事に帰着することの証明が必要 • NP完全であることが示された最初の問題: SAT • Cook. The Complexity of Theorem-Proving Procedures

  25. MY-NEW-PROBLEM-2 MY-NEW-PROBLEM-1 NP困難性を証明する方法(2) • ひとたび一つのNP困難問題が見つかった後は? • ある一つのNP困難問題Aが,その問題Bに帰着する(多項式時間還元可能である)ことを示せば,BのNP困難性が示せる • つまり,BはAと少なくとも同程度に難しい • 新しい問題のNP困難性を言うのにほとんど常に用いられる論法 • 「例のあれ(例: SAT)を解くのにこれ(新問題)が使える」 SAT

  26. 有名なNP完全問題(1) • 充足可能性(SAT):命題論理式を1にする変数への値(0/1)の割り当てがあるか? • 入力: n変数(x1, ..., xn)命題論理式 (0-1変数, , , からなる式)E • 出力: E=1に解が存在すれば1, さもなければ0 • 3-CNFの充足可能性(3SAT):上記で,命題論理式を各節が3リテラルから成るCNF (Conjunctive Normal Form)に限定したもの • 例: (x1x2x3)  (x1x3x4)  (x2 x3  x4)  (x1x2 x4)

  27. 有名なNP完全問題(2) • ナップサック問題(KNAPSACK):n個の物体からいくつかを選び出して合計の重さを指定通りにできるか? • 入力: n個の整数a1, ..., anと 整数w • 出力: n個の0-1変数x1, ..., xnを未知数としa1x1+...+anxn= w に解があれば1, さもなければ0 • 集合打問題(HITTING-SET):互いに重なりのあり得るn個の有限集合がある.一つの集合からちょうど一つの元を選び出せるか • 入力: n個の有限集合 S1, ..., Sn • 出力: 集合 A S1  ... Snで,| A Si |= 1 (i = 1, ..., n)を満たすものがあれば1, さもなければ0

  28. 有名なNP完全問題(3) • 0-1整数計画問題(0-1 INTEGER-PROGRAMMING):n個の0-1変数に関する整数係数連立一次方程式に解があるか? • 入力: 整数行列Cと整数ベクトルd • 出力: Cx = dとなる0-1ベクトルが存在すれば1, さもなければ0

  29. 有名なNP完全問題(4) • クリーク(CLIQUE): n頂点のグラフに,指定された大きさのクリーク(完全部分グラフ)があるか? • 入力: グラフGと整数k • 出力: Gがk頂点の完全グラフを部分グラフとして含めば1, さもなければ0 • 同型部分グラフ(SUBGRAPH): n頂点のグラフが指定されたグラフを部分グラフとして含むか? • 入力: グラフGとH • 出力: GがHを部分グラフとして含めば1, さもなければ0

  30. 有名なNP完全問題(5) • ハミルトン閉路(HAMILTON): n頂点のグラフに全頂点を一度ずつ通る閉路があるか? • 入力: グラフ • 出力: 全頂点を一度ずつ通る閉路があれば1, さもなければ0 • 巡回セールスマン(TSP):n点間の距離が与えられ,全点を与えられた総距離以内の閉路でつなげるか? • 入力: n点間の距離行列 d(i, j) (1  in, 1  jn)と 総距離T • 出力: d(p1, p2) + d(p2, p3) + ... + d(pn – 1, pn) + d(pn, p1) Tなる1, 2, ..., nの順列(p1, ..., pn)が存在すれば1, さもなければ0

  31. 有名なNP完全問題(6) • k-彩色(k-COLOR) : n頂点のグラフの隣り合う頂点が同じ色にならないように頂点をある決まったk ( 3)色でぬれるか • 入力: グラフG • 出力: 頂点を上記を満たすようk色でぬれれば1, さもなければ0 この他に数千のNP完全問題が知られている http://www.nada.kth.se/~viggo/problemlist/ A compendium of NP optimization problems

  32. 可能な多項式時間還元の鎖 KNAPSACK • 以降: HAMILTON  TSP, SAT  KNAPSACK HITTING-SET 0-1 INTEGER-PROGRAMMING 3SAT CLIQUE SUBGRAPH HAMILTON 初級 TSP 中級 k-COLOR 上級 A B : A が B に多項式時間還元可能

  33. 初級編: HAMILTON  TSP • 考え方: HAMILTONを解くのにTSPで解けないか? • 全頂点を回る閉路を見つける問題を,TSP (規定時間で全頂点を回れるか)に変換できないか? • G = V, Eのハミルトン閉路を見つけるのに,以下のようにTSPにおける頂点間の距離を設定する • 辺 (a, b)  Eならば d(a, b) = 1, • そうでなければ d(a, b) = n + 1 • そして,総距離 = nとする • あきらかにこのTSPに解があることと,Gにハミルトン閉路が有ることは同値

  34. 3SAT  KNAPSACK • 3CNFとは • 3SATの組み合わせ構造 • 3SATをKNAPSACK風連立一次方程式へ • 3SATをKNAPSACKへ

  35. CNF, 3CNFとは • リテラル(literal): 変数またはその否定 • xまたは x • 節(clause): いくつかのリテラルをORで結合したもの • l1 ... ln (li : リテラル) • 和積標準形(Conjunctive Normal Form; CNF): いくつかの節をANDで結合したもの • C1  ...  Cm (Ci : 節) • 3CNF : CNFで各節の大きさ(リテラル数)が3 • 例: (x1x2x3)  (x1x3x4)  (x2 x3  x4)  (x1x2 x4)

  36. 3SATの組み合わせ構造 • つまりは各節から少なくとも一つ1となるリテラルを選べということ • (x1x2x3)  (x1x3x4)  (x2x3x4)  (x1x2 x4) • 書き換えの一歩 • x1x2x3 x1 + x2 + x3  1 • xは,xと独立な変数yとみなした上でx + y = 1を課す • x1  x2  x3 • x1  x3  x4 • x2  x3  x4x1  x2  x4 • x1 + x2 + x3  1 • y1 + y3 + x4  1 • x2 + x3 + x4  1 • y1 + y2 + y4  1 • x1 + y1 = 1 • x2 + y2 = 1 • x3 + y3 = 1 • x4 + y4 = 1

  37. KNAPSACK風連立方程式 • 不等式を等式へ変換 • x + y + z 1  d, e{0,1}x + y + z + d + e = 3 • x1 + x2 + x3  1 • y1 + y3 + x4  1 • x2 + x3 + x4  1 • y1 + y2 + y4  1 • x1 + y1 = 1 • x2 + y2 = 1 • x3 + y3 = 1 • x4 + y4 = 1 が解を持つ • x1 + x2 + x3 + z1 + z2 = 3 • y1 + y3 + x4 + z3 + z4 = 3 • x2 + x3 + x4 + z5 + z6 = 3 • y1 + y2 + y4 + z7 + z8 = 3 • x1 + y1 = 1 • x2 + y2 = 1 • x3 + y3 = 1 • x4 + y4 = 1  が解を持つ

  38. ここまでのところ • 与えられた3CNFの充足可能性を,等価な0/1の方程式Ax = bに変換した b x A : 0-1行列 3 3 ... 3 1 ... 1 m (節の数) = n (変数の数) 2n+2m 0-1ベクトル

  39. KNAPSACKへの変換 • Aの各列ベクトルaiとbを一つの(2n+2m+1)進整数とみなす • 例: n = m = 4 の場合 • 元の方程式はこうして得られた整数を係数とするナップサック問題 a1’ x1 + ... + a2n’ x2n = b’ と等価 (○’ は ベクトル○を変換して得た整数) 0 1 0 0 1 1 1 (1110010)17=25640964

  40. 決定不能(undecidable)問題とは • 正しいアルゴリズムが存在しない決定問題 • 決定不能であることが「証明されている」問題が有る

  41. コンピュータで問題が「解ける」ということ • 問題は入力と出力の間の関係として規定される • 一般にある問題に対する可能な入力は可算個ある • つまり「問題」とは自然数を領域とした「関数」に他ならない • ある問題の特定の入力のことをその問題の「インスタンス(実例)」とも言う • あるプログラムが,ある問題のすべての可能な入力(実例)に対して • 常に停止する(無限ループに陥らない) • 常に正しい答えを出す とき,そのプログラムは,その問題を解く(正しいアルゴリズムである)という • ある問題を解くプログラムが存在するとき,その問題は決定可能であるという(コンピュータでその問題が解ける)

  42. 可算集合 • 可算集合 • 自然数との一対一対応がつく集合を可算集合(coutable set)という • 字面から, 可算=数えられる=有限, というのは誤解 • あくまで可算は「無限」の一種

  43. 可算集合の例 • 自然数の集合 N = { 0, 1, 2, 3, … } • 自然数2つの組の集合 • N2 = { (0,0), (0,1), (1,0), (0,2), (1,1), (2,0), … } • 明らかに自然数Nよりも「大きい」気がするがそれでも可算 • 有理数の集合 • 自然数100個の組 • 有限個の自然数の組 • 代数的な数の集合 • 有限個の文字からなる文字列 • すべてのプログラムの集合も可算

  44. 可算でない集合の例 • 自然数の部分集合すべての集合 • 2N = { S | S N } • 自然数から要素数2以上の有限集合への関数の集合 • N E (|E|  2) • 実際2Nは N{ 0, 1 }に他ならない • (長さ無限の)自然数列, ビット列の集合 • 自然数列は「N N」の要素, ビット列は N{ 0, 1 }の要素に他ならない • 実数の集合(とくに[0, 1]) • [0, 1]は2進小数展開により無限のビット列に他ならない • ここで挙げたものはどれも「連続濃度」を持つ集合

  45. 2Nは可算でない • カントールの対角線論法 • 2Nが可算だとする(= S0, S1, S2, …) • T = { i | i Si } • TはNの部分集合だがどのSiとも明らかに一致しない S0S1S2 ... T ? 012 0 1 1 ... 1 1 1 ... 1 0 0 ... ... ... ... ...

  46. 決定不能な問題 • 「問題」とは自然数を領域とする関数のことであった • 自然数を領域とする関数の集合は可算集合ではない • 一方すべてのプログラム(有限の文字列)の集合は可算集合 • よってプログラムで表現できない問題(自然数を領域とする関数)が存在すること自体はこれで示せていることになる • 具体的に(人間が解きたくなる問題で)見つけるのはまた別の話

  47. 決定不能な問題の例 • 整数係数多項式(ディオファントス方程式)の整数解 • 入力: n変数の,整数係数の多項式P • 例: x100 + y100 – z100 = 0 • 出力: P(x1, x2, ..., xn) = 0 に整数解が存在すれば1, しなければ0 • プログラムの停止性の判定 • 入力: プログラムPとそれに対する入力X (文字列) • 出力: PにXを与えて実行して,停止するなら1, 停止しなければ0

  48. 停止性の判定は決定不能(証明) • プログラム(文字列)は可算個 • P0, P1, P2, ... と書く • 入力(文字列)も可算個 • X0, X1, X2, ... と書く • 「停止性の判定」とは Piに Xjを入力すると停止するかどうかをすべてのi, jに対して判定すること • このプログラム halt(i, j) が存在するとして矛盾を導く P0P1P2 ... X0X1X2 0 1 1 ... 1 1 1 ... 1 0 0 ... ... ... ... ...

  49. confuse(i) { if (halt(i, i) = 0) return; /* 終了 */ else 無限ループに入る;} • confuse自身もプログラムだから,どこかの列に対応している (Pcとする) halt confuse P0P1P2 ... X0X1X2 0 1 1 ... 1 1 1 ... 1 0 0 ... ... ... ... ...

  50. = 0  halt(c, c) = 0  confuse(c)は作り方により停止する (矛盾) • = 1  halt(c, c) = 1  confuse(c)は作り方により停止しない (矛盾) confuse halt(i, i) P0P1P2 ... X0X1X2 0 1 1 ... 1 1 1 ... 1 0 0 ... confuse(i) { if (halt(i, i) = 0) return; else 無限ループに入る;} ... ... ... ...

More Related