データ構造とアルゴリズム
第十四回 (2014年
1月17日)
NP-完全性、帰着可能性
http://www.sw.it.aoyama.ac.jp/2013/DA/lecture14.html
Martin J. Dürst
© 2010-14 Martin
J. Dürst 青山学院大学
今日の予定
- これからの予定
- 前回の残りと復習
- NP-完全性、帰着可能性
- 授業改善のための学生アンケート
これからの予定
- 1月24日 (金): 15回目の授業
- 1月31日(金) 9:30~10:55: 期末試験
Google Chrome 内の過去問の表示について: 拡張 (例: Style
Chooser) を追加が必要
今回の目的
- 「簡単な問題」とそうでない問題を見分ける
- 視野の拡大、アルゴリズムの「宇宙」の展望
前回の問題例
- 問題例 1: 3-SAT
- 問題例 2: 独立集合
- 問題例 3: 巡回セールスマン
前回の問題例の共通点
- 具体的な応用が多数存在
- 総当たり法より根本的に良いアルゴリズムが未知
- 総当たり法で解こうとすると指数的時間 (exponential time)
が必要
- n が大きい場合 (例: 100)、事実上解けない
- 早いアルゴリズムが無いことも現在証明できない
- 同じ共通点を持つ問題が多数存在
多項式時間と指数的時間
- 多項式問題は「手に負える問題」(tractable)
- 指数的問題は「手に負えない問題」(intractable)
多項式時間の特徴
- 指数が大きい問題 (例: O(n5))
は殆どない
- 多項式の加算と乗算はまた多項式
- 多項式時間は計算機のモデルの選択にそれほど左右されない
例: 並列処理で計算機の数が c
の場合、改善は最大で ·1/c
- 多項式時間の問題を一部別扱いしたい場合に、分岐点の選択が困難
- 多項式時間で解ける問題の集合を P と書く
NP 問題
- 前回の問題例 1-3 の変形は全て NP 問題
- NP 問題の特徴:
答えが真の場合、証拠があればすぐ (多項式時間で)
確認可能
逆に答えが偽の場合、確認に指数時間が必要
- NP の由来:
Nondeterministic Polynomial Time (非決定性多項式時間)
同時に何台も計算機が使えれば多項式時間で解ける
(「何台も」は並列処理と違って、一定数のではなく、「いくらでも」の意味)
- P の問題は場合によって微妙な変更で
NP になる
例:
グラフ内の二頂点間の一番短い経路と一番長い経路
- NP 問題は数多く存在
- P ⊆ NP
- P = NP ? P ≠ NP ?
情報テクノロジー内のもっとも有名な未解決問題
Clay Mathematics Institute Millenium
Problem の一つ
問題の種類
- 関数問題 (function problem)
答えが一つしかない
例: 順列、行列の掛算、フィボナッチ関数など
- 最適化問題 (optimization problem)
最大、最速、最短など、又は
できるだけ大きい、できるだけ短いなど
- 決定問題 (decision problem)
決定問題
(decision problem)
- 結果は真か偽しかない問題
- 他の問題の「置き換え」ができる
最適化問題: k 以上 (や以下) で可能かどうか
- 決定問題が元の問題より複雑になる可能性がない
- 決定問題が理論的に扱いやすい
- NP 問題は定義上決定問題
- NP 問題に置き換えられる問題は「NP 困難」(NP-hard)
という
NP 内の問題の比較
帰着
(reduction)
- 概要: ある問題 A を別の問題 B に置き換えて解く
(解けることを証明する)
- A の入力 ⇒ (変換) ⇒ B のアルゴリズム ⇒ (変換) ⇒ A
の出力
- 変換は両方とも多項式時間で実行
- A が B に帰着可能の場合、A ≤P B
と書く
- 即ち、A が B より (多項式時間の変換内で)
簡単か同じ難しさ
- 実例: 3-SAT を独立集合に帰着
NP 完全性
(NP-Completeness)
- 全ての NP 問題を帰着できる NP 問題は NP
完全問題という
- 殆どの NP 問題は NP
完全であるが、そうではない問題もありそう
計算複雑性理論
(computational complexity theory)
- 目的: 計算問題の根本的な分類
- 分類の要素:
- 計算量 (時間)
- メモリ量
- 回路の形
- 並列処理など
参考: Complexity Zoo
ポストの対応問題
(Post's correspondence problem; Emil Post, 1946)
- 二つ以上の文字を使う言語で、二つの単語集 W
= {w1, w2, ...
wn} と V =
{v1, v2, ...
vn} が与えられている
- 問題: W の単語と V
の単語を同じように選んだ場合、同じ文が作れるかどうか
(単語の重複可)
- 可能な例: W = {aa, b}, V = {a, aba}
正解例: aa-b-aa = a-aba-a
- 不可能な例: W = {ccd, cd, c}, V = {cc, ddc,
d}
(理由:
どの単語をとっても、文の最後の文字が必ず違う)
- この問題を一般的に解くアルゴリズムが存在しない
- 存在しないことの証明はある
まとめ
- 多項式時間で (いまだに) 解けない問題が存在
- その多くは NP 完全 (又は NP 困難) 問題
- 難しい問題を早めに見分けるのが大事
- NP 完全の問題より解きにくい問題もある
授業改善のための学生アンケート
お願い:
できるだけ自由記述を使って、具体的に書いてください
(悪い例: 発音が分かりにくい; 良い例:
さ行が濁っているかどうか分かりにくい)