590 likes | 966 Views
情報システム基盤学 基礎 1 アルゴリズムとデータ構造. Elements of Information Systems Fundamentals1. アルゴリズムとデータ構造 第 7 回 難しい問題. 目次. 難しい 問題の解き方 バックトラック法 分枝限定法 Complexity Theory( 計算量理論 ) 問題の難易度によるクラス分け クラス P とクラス NP NP 完全問題 多項式時間帰着. 難しい問題. これまで扱って来た問題 ソーティング、 最短経路問題 、 最小全域木 文字列照合 多項式時間アルゴリズムを容易に作れない問題
E N D
情報システム基盤学 基礎1アルゴリズムとデータ構造 Elements of Information Systems Fundamentals1 アルゴリズムとデータ構造 第7回 難しい問題
目次 • 難しい問題の解き方 • バックトラック法 • 分枝限定法 • Complexity Theory(計算量理論) • 問題の難易度によるクラス分け • クラスPとクラスNP • NP完全問題 • 多項式時間帰着
難しい問題 • これまで扱って来た問題 • ソーティング、 • 最短経路問題、最小全域木 • 文字列照合 • 多項式時間アルゴリズムを容易に作れない問題 • しらみつぶし的な解探索が必要 • 高速化技法 • バックトラック法 • 分枝限定法 多項式時間アルゴリズム存在 (kを定数として,)O(nk)時間のアルゴリズム
n queen problem(n女王問題) • 入力: • チェス盤面のサイズ • 現実のチェス盤面 8x8の一般化 • n個のクイーンの駒 • 利き筋 • 8方向:縦、横、ななめ • 出力: • n個のクイーンが互いに利き筋に当たらないような駒の置き方をすべて求める
単純なしらみつぶし解法 • 実際にn個のクイーンを配置して、制約条件を チェック • generate and test法 • 調べる解の個数 • 1つの行または列には1個のクイーンしか置けない ⇒それでも 解を生成してからチェック バックトラック法:実用上、調べる解の個数を大幅削減
解の個数が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!
しらみつぶし解探索における解集合 • 木として表現できることが多い • 一般のグラフになってしまうこともある⇒難易度UP 1 2 3 4 n=4 ....... 1 3 4 2 3 4 ....... n!の解を調べる=探索木の葉をすべて訪れる 3 4 2 4 ....... 木の深さ優先探索 木の幅優先探索の出番 4 2 4 3
バックトラック法 • しらみつぶし的な解探索での高速化技法 • アイデア: • 深さ優先探索ですべての葉を訪問しない • 木を降りても解がないと判明した時点で木を引き返す(バック) • Pruning (枝刈り) • バックトラック法が使える条件 • 解を逐次的(incremental)に作成できる • 解をステップごとに段階的に(stepwiseに)作れる 部分解で解が制約条件を満たすか評価
1列目:第1行に配置 2列目:第3行に配置 1 2 3 4 1列目:第1行に配置 2列目:第2行に配置 ....... 1 3 4 2 3 4 1 ....... 打ち切り 2 3 4 2 4 3 ....... 行番号 4 4 2 4 3 5 (n-2)!個の 解チェックをさぼれた 探索継続 6 7 (n-3)!個の 解チェックをさぼれた 8 1 2 3 4 5 6 7 8 列番号
1列目:第1行に配置 2列目:第3行に配置 1 2 3 4 1列目:第1行に配置 2列目:第2行に配置 ....... 1 3 4 2 3 4 1 ....... 打ち切り 2 3 4 2 4 3 ....... 行番号 4 4 2 4 3 5 (n-2)!個の 解チェックをさぼれた 探索継続 6 7 (n-3)!個の 解チェックをさぼれた 8 1 2 3 4 5 6 7 8 列番号
バックトラック法の流れ • 探索木を完全に作らない • 必要に応じて探索木を展開 • メモリ使用量、計算量を削減
level 0 ans= 1 2 3 4 ans={1} 1 2 2 3 4 ans={1,3} ans={1,2} 3 2 4 ans={1,3,2}
9 10 11121314 15 1 2 3 4 5 6 7 8 8 7 9 6 10 5 11 4 12 3 13 2 14 1 15 斜め列d1 斜め列d2
メモリ消費量: O(n) • 再起呼び出しの深さは最大n+1
分枝限定法(Branch and Bound) • 最適化問題をバックトラック法で解く手法 • 目的関数を最大化あるいは最小化する問題 • 枝刈り • これまでに得られた最大値を超えないことが判明したら木を降りるのをやめる • この判定自体が難しい
ナップサック問題 • ナップサック 容量 • 品物の集合={m1,m2,...,mn} • vi: miの価値 • wi: miの重さ 目的:ナップサックに入れる品物の価値を最大化 • 制約条件:入れた品物の重さの合計 (重さあたりの価値)が大きい品物を入れるのが得
0-1ナップサック問題 • 各商品miを入れるか入れないかを判定 • 入れる⇒1 • 入れない⇒0 • しらみつぶしで調べる解の個数 • 2択がn回 貪欲法が最適解にならない
0-1ナップサック問題の解集合 • 高さnの2分木として表現可 商品1の選択 0 1 商品2の選択 0 1 0 1 ....... 商品3の選択 0 1 0 1 0 1 : ....... 商品nの選択 s1=1, s2=1, s3=0
分枝限定法の枝刈り • これまでに得られた最大値を超えないことが判明したら木を降りるのをやめる • が選択 • が選択されない • 残ったナップサック問題 • 品物の集合 • ナップサックの容量W- 選択済みの商品の価値 これを求めるのは 困難 m2 ナップサック m1 残りの問題 W
解決策 • 枝刈り効率が若干下がるのを容認 • 高速計算可能な近似値を利用 • O(n)で計算可能 • 近似値が満たすべき条件: 真の最適値より大きい
枝刈りに関する近似値の条件 • 枝刈り不可のケース • 近似値<最適解⇒ 枝刈り不可なのに枝刈り • 正解を見落とす可能性あり • 近似値>最適解⇒ 枝刈り不可 40 80 真の最適解42⇒枝刈り不可 40 45 80 35
枝刈りに関する近似値の条件 • 枝刈り可能なケース • 近似値<最適解⇒ 枝刈り可能 • 近似値>最適解⇒ 枝刈り可能なのに枝刈りしない • 枝刈り効率低下。正解の見落としはないのでOK。 40 80 真の最適解35⇒枝刈り可能 40 80 45 32
解決策 • 枝刈り効率が若干下がるのを容認 • 高速計算可能な近似値を利用 • O(n)で計算可能 • 近似値の条件: 真の最適値より大きい 有理ナップサック問題の最適解を採用
有理ナップサック問題 • 各商品miをどれだけ入れるかを決定 • 0入れる量 • 貪欲アルゴリズムが最適解 • 重さあたりの価値が最大の品物を入れるだけ入れる • ナップサックに空きがあれば、重さあたりの価値が次に大きい品物を入れる • m1:10kg, m2: 20kg, m3:20kg⇒価値60+100+ 20x4= 240, 最適 O(n)で計算可能 m2 m3 m1 ナップサック
2つの問題の解空間の関係 • 0-1問題の解空間は有理問題の解空間の一部 ⇒ 有理問題の最適解 0-1問題の最適解 有理ナップサック問題 0-1ナップサック問題 緩和(Relaxation) 制約条件を緩めた緩和問題の解から元の問題の近似値を得る技法 ⇒元の問題の最適解を得る手がかりとする
分枝限定法による0-1ナップサック問題の解法 選択済みの商品の価値 Cmax増加の 可能性あり
例題 • m1 ナップサックの容量W=14
value = 0, Weight=14, 近似解=44 Cmax=0 m1 value = 16, Weight=9, 近似解=28 1 value = 38, Weight=2 m2 1 近似解=6 m3 value = 38, Weight=2, 0 近似解=16/3 value = 38, Weight=2, m4 Cmax =38 0 : 商品nの選択
value = 0, Weight=14, 近似解=44 Cmax=38 value = 0, Weight=14, value = 16, Weight=9, m1 0 近似解=42 近似解=28 1 value = 16, Weight=9, value = 38, Weight=2 m2 0 1 近似解=6 近似解=20 m3 value = 38, Weight=2, 0 近似解=16/3 m4 value = 38, Weight=2, 0 : 商品nの選択
分枝限定法による0-1ナップサック問題の解法(別実装)分枝限定法による0-1ナップサック問題の解法(別実装) miを選択しない時のみチェック
目次 • 難しい問題の解き方 • バックトラック法 • 分枝限定法 • Complexity Theory(計算量理論) • 問題の難易度によるクラス分け • クラスPとクラスNP • NP完全問題 • 多項式時間帰着
問題の難易度によるクラス分け(Complexity Class) 多項式時間アルゴリズムが知られている問題(クラスP) (kを定数として,)O(nk)時間のアルゴリズム 最短経路問題, 最小全域木問題, ソート 指数時間かかることが判明している問題 グラフの全ての部分木を列挙 解の検証は多項式時間でできるが,解を求める多項式時間アルゴリズムが知られていない問題(クラスNP) 3SAT, 最大クリーク, ハミルトンサイクル, TSP 0-1ナップサック問題
クラス分けの重要性 • 問題の難易度により適切なアルゴリズムデザインは変化 • クラスP: しらみつぶしに解くのは効率が悪い • 難しい最適化問題(クラスNP完全) • 多項式時間最適アルゴリズムの設計は無駄 • 動的計画法 • しらみつぶし的解法(分枝限定法) • 近似解で我慢
なぜ多項式時間を重要視するのか? 多項式時間と指数時間の差はすごく大きい アルゴリズム A (多項式時間アルゴリズム) アルゴリズムA n個のデータ 答え 500・n3 回の命令を使用 アルゴリズム B (指数時間アルゴリズム) アルゴリズムB n個のデータ 答え 2n回の命令を使用 1秒間に1億回の命令を実行できる計算機と使うと …
u 問題のタイプ 最適化問題 v グラフ Gと2点u, vが与えられたとき,u,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本求めなさい 計算量理論では 判定問題を考える
判定問題と最適化問題の関係1/2 判定問題 を多項式時間で解くアルゴリズムがある 最適化問題 を多項式時間で解くアルゴリズムがある 最短距離の例: グラフ Gと2点u, v と定数 kが与えられたとき, 判定問題 最適化問題 判定問題が解ければ,最適化問題も解けるかな? u, v間に長さ k以下の道があるか? u,v間の最短距離を求めなさい 判定問題を多項式時間で解くアルゴリズムがあれば,それを繰り返し適用して最適化問題を解ける (k=0 のとき, k=1 のとき, …)
判定問題と最適化問題の関係 2/2 判定問題 を多項式時間で解くアルゴリズムがある 最適化問題 を多項式時間で解くアルゴリズムがある 最短距離の例: グラフ Gと2点u, v と定数 kが与えられたとき, 判定問題 最適化問題 最適化問題が解ければ,判定問題も解けるかな? u, v間に長さ k以下の道があるか? u,v間の最短距離を求めなさい 最適化問題を解くアルゴリズムがあれば,それを使って最適解を求め,kと比較すればよい 判定問題だけ考えても差し支えない
クラス P と クラス NP クラス P(complexity class P) 多項式時間で解くことができる判定問題の集合 違う言い方をすると 決定性(deterministic)チューリング機械上で, 多項式時間(polynomial)で解ける問題からなる集合 クラス NP(complexity class NP) 解が与えられた時, 多項式時間で検証できる判定問題の集合 違う言い方をすると 非決定性(non-deterministic)チューリング機械上で, 多項式時間(polynomial)で解ける問題からなる集合 注: 厳密な定義ではありません ⇒ 詳しくは計算量理論を勉強すべし! 簡単のため, 本講義では, 上のように考えてください
クラス P と クラス NP の包含関係 クラス P(complexity class P) 多項式時間で解くことができる判定問題の集合 クラス NP(complexity class NP) 解が与えられた時, 多項式時間で検証できる判定問題の集合 P が NP に含まれるのは明らか 100万ドルの懸賞金!!! http://www.claymath.org/millennium/P_vs_NP/ を参照 でも, P = NP かどうか分からない NP P=NP P 見やすさを考慮して,わざとずらして書いてます または
NP完全(NP-complete) 判定問題 A が次の2つを満たすなら“A はNP完全である” という (NP-Complete) 1. A は NP に属す 問題 A を解くのは難しそう… 2. A が多項式時間で解けるならば, NP に属する全ての問題が多項式時間で解ける イメージ的には下図のようになる NP完全 NP A 一言でいうと NPの中で最も難しい問題 難度 P
NP完全性の証明 判定問題 A がNP完全であるかの見極めるのは大切 • NP完全であれば多項式時間で厳密には解くのは困難 • 動的計画法、しらみつぶし的解法 • 近似解で我慢 1. A は NP に属す 2. A が多項式時間で解けるならば, NP に属する全ての問題が多項式時間で解ける NP完全 NP A 2を示すのはすごく大変… 難度 でも 「ある問題がNP完全であること」を利用すればもう少しだけ楽に証明できる(後述) P どんなものがあるのか?
NP完全問題の例 SAT(論理式の充足可能性問題, Satisfiability Problem) 一番最初にNP完全であることが証明された問題 n個の論理変数⇒ x1, x2, … , xn (xi= 0 or 1 ) xiのリテラル⇒ xi と xi リテラルの和の節⇒ リテラルをOR(∨)でつなげた論理式 C = x1∨ x2∨ x4∨ x6 例: SAT C1C2C3....Cm m個の和の節のAND Input: 真にする割り当てはあるか?(Yes or No) Output:
SATの例題 SAT C1C2C3....Cm m個の和の節のAND Input: 真にする割り当てはあるか?(Yes or No) Output: 真理値表を書いてみる 4個の和の節を全て1にする 割り当てはあるか? x1x2x3 C1 C2 C3C4 0 0 0 1 1 0 1 (入力例) 0 0 1 0 1 1 1 0 1 0 1 1 1 0 C1 = x1∨ x2∨ x3 C2 = x2∨ x3 0 1 1 1 0 1 0 1 0 0 1 1 0 1 C3 = x2∨ x3 C4 = x2 1 0 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 0 1 0
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 に属する全ての問題が多項式時間で解ける
NP完全性の証明 「SATがNP完全であること」を利用すれば, 比較的楽に(とは言っても難しい)他の問題がNP完全であることを示せる 多項式時間帰着 NP B SAT SATはNP完全である つまり 2. SAT が多項式時間で解けるならば, NP に属する全ての問題が多項式時間で解ける ある問題 B がNP完全であることを示すためには 1. 「B はNPに含まれる」を示す(比較的簡単), 2. 「B が多項式時間で解けると SAT も多項式時間で解ける」ということを示す
多項式時間帰着 ある問題 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 を多項式時間で解くことは難しい!! 49
多項式時間帰着の広がり SATからの多項式時間帰着により, 問題 B がNP完全であること, 問題 C がNP完全であることが示せた 数千もの問題についてNP完全性が示されている 問題 Bからの多項式時間帰着により, 問題 E がNP完全であること, 代表例: 問題 F がNP完全であること, 3SAT, CLIQUEVERTEX-COVERSUBSET-SUM HAM-CYCLE, TSP 問題 G がNP完全であることが示せた 多項式時間帰着の向き NP I H C G F SAT B E
多項式時間帰着の一例:3SAT ⇒ CLIQUE 3SATがNP完全であるということが分かっている前提で, 「CLIQUEがNP完全である」 ことを示す 3SAT CLIQUE グラフG, 整数 k Input: 制限付きのSAT問題各節は必ず3つのリテラルの和からなる Output: G中に, サイズ kのクリークがあるか? リテラル xi, xi (i=1,…,n)から,3つのリテラルを使って構成した和の節が m 個 Input: ※クリーク: どの2頂点間にも 辺がある部分グラフ 全ての節を 1 にする割当ある? Output: 入力例 k= 4 入力例 C1 = x1∨ x2∨ x3 C2 = x1∨ x2∨ x3 C3 = x1∨ x2∨ x3