データ構造とアルゴリズム
第十四回 (2015年
1月9日)
NP-完全性、帰着可能性
http://www.sw.it.aoyama.ac.jp/2014/DA/lecture14.html
Martin J. Dürst
© 2010-15 Martin
J. Dürst 青山学院大学
今日の予定
- これからの予定
- 前回の残りと復習
- NP 問題
- 帰着
- NP-完全性
これからの予定
- 1月16日 (金): 15回目の授業
- 1月30日 (金) 9:30~10:55: 期末試験
前回のまとめ
- 各自のアルゴリズムを超えてアルゴリズムの共通点
⇒アルゴリズムの設計方法
- 設計方法によって、新アルゴリズムの発見を促す
- 主な設計方法:
単純なアルゴリズム、総当たり方、欲アルゴリズム、分割統治法、動的計画法、ネットワークフロー
- 適切な設計方法は問題の部分回の構造に依存
- 問題の詳細によって、適切な設計方法が変わることがある
(例: ナップサック問題)
今回の目的
- 「簡単な問題」とそうでない問題を見分ける
- 視野の拡大、アルゴリズムの「宇宙」の展望
前回の問題例
- 問題例 1: 3-SAT
- 問題例 2: 独立集合
- 問題例 3: 巡回セールスマン
宿題: 前回の問題例の共通点
- 具体的な応用が多数存在
- 総当たり法より根本的に良いアルゴリズムが未知
- 総当たり法で解くには指数的時間 (exponential time)
が必要
- n が大きい場合 (例: 100)、事実上解けない
- 早いアルゴリズムが無いことも現在証明できない
- 同じ共通点を持つ問題が多数存在
多項式時間と指数的時間
- 多項式問題 (O(nc))
は「手に負える問題」(tractable)
- 指数的問題 (O(cn))
は「手に負えない問題」(intractable)
(問題の計算量は解けるラルゴリズムの中の一番低い計算量又は理論的に、特に最低必要な計算量)
多項式時間の特徴
- 指数が大きい問題 (例: O(n5))
は殆どない
- 多項式の加算と乗算はまた多項式 (多項式環)
- 多項式時間は計算機のモデルの選択にそれほど左右されない
例: 並列処理で計算機の数が m
の場合、改善は最大でm 倍
- 多項式時間の問題を一部別扱いしたい場合に、分岐点の選択が困難
- 多項式時間で解ける問題の集合を P と書く
NP 問題
- 前回の問題例 1-3 の変形は全て NP 問題
- NP 問題の特徴:
答えが真の場合、証拠があればすぐ (多項式時間で)
確認可能
逆に答えが偽の場合、確認に指数時間が必要
- NP の由来:
Nondeterministic Polynomial Time
(非決定性多項式時間)
同時に何台も計算機が使えれば多項式時間で解ける
(「何台も」は並列処理と違って、一定数のではなく、「いくらでも」の意味)
- NP 問題の集合を NP と各
- 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 (1-2-1)
- 不可能な例: W = {ccd, cd, c}, V = {cc, ddc,
d}
(理由:
どの単語をとっても、文の最後の文字が必ず違う)
- この問題を一般的に解くアルゴリズムが存在しない
- 存在しないことの証明はある
まとめ
- 多項式時間で (いまだに) 解けない問題が存在
- その多くは NP 完全 (又は NP 困難) 問題
- 難しい問題を早めに見分けるのが大事
- NP 完全の問題より解きにくい問題もある