第16章 動的計画法 アルゴリズムイントロダクション 動的計画法(DP) とは Dynamic Programming Programing : 表を引く手法 Dynamic : その表を動的に作成していく 最適化問題に使用される手法 適用可能な問題には構造的な制限がある. 適用可能であれば効率的に最適解を算出可 動的計画法(DP) の構造 基本的に以下の構造 1. 最適解の構造を特長づける 2. 最適解の値を再帰的に定義する. 3. ボトムアップ形式で最適解の値を計算 4. 求められた情報から一つの最適解を構成 …どういうこと? 最適解の中に部分的に最適な解があればOK! 連鎖行列積 DPで効率よく解く事の出来る問題の一例 n個の行列の積を考える どの順番で計算すると計算回数が一番少なく なる? 連鎖行列積 総当たりで計算すると… 通り数は適切なカッコの付け方 これは碁盤目状の道を対角線に向かって進むときに対 角線を超えない通り方と等しい (対角線を超える=カッコの対応が正しく付かない) 総通り数は Stirling‘s formula から導出. 指数的に増えてくるのであまり頭良くない. 連鎖行列積 最適解を観察してみる が最適解だとする. この解は部分問題の最適解 を持つ. 最適解が他のパターンだとしても, などの部分的な最適解を部分的に含む. 二つの積から順々に構成することが可能. 最適解の構造を特長付けできた. 連鎖行列積 最適解の値を再帰的に定義 : 行列積 にかかるコスト 連鎖行列積 ボトムアップに最適解を計算 0 129 63 75 95 部分問題に対する最適解を計算 0 21 35 57 0 6 20 0 8 0 再帰的に計算が可能 再帰するたびに計算するのではなく その値を表に覚えておく 連鎖行列積 最適解を構成 0 129 63 75 95 0 21 35 57 0 6 20 0 8 0 1 1 3 3 2 3 3 3 3 4 最適解の構造を構成したい. 積がどこで分かれているのかを示す 値を別の表で記憶する 連鎖行列積 最適解を構成 1 1 3 3 2 3 3 3 3 4 動的計画法の基本 なぜ連鎖行列積で動的計画法が使えたか? 部分構造の最適性 問題の最適解がその内部に部分問題に対する最適解を 含んでいた. →問題を小さく考える事ができた 部分問題の重複性 再帰アルゴリズムが同じ部分問題を何度も訪れていた. →記憶することでコストを下げる事ができた →もし記憶せずに毎回計算していたら…? 動的計画法の基本 もし毎回計算していたら… 動的計画法の基本 もし毎回計算していたら、指数コストかかる. 上からn段目にかかる計算回数を とすると を仮定して,帰納的に証明. 動的計画法の基本 動的計画法が効率的に動く背景 部分構造の最適性 →問題を小さく考える事ができた 部分問題の重複性 →記憶することで時間コストを下げる 最長共通部分系列(LCS) 二つの系列X,Yにおける,最も長い,共通部 分系列Zを求める問題 は共通部分系列(Common Subsequence) これは最長? 最長なものの例として など. 最長共通部分系列(LCS) 動的計画法が使えるか? 部分構造の最適性 部分問題の再起解 以上二つを満たせば動的計画法で解ける. 最適解がその部分問題の最適解を必ず含む? 部分問題の最適解は再帰的に使用される? 最長共通部分系列(LCS) 定理16.1(LCSの部分構造の最適性) let : 1. 2. 3. ならば であり,かつ, は と とのLCSである. のとき, ならば は と とのLCSである. のとき, ならば は と とのLCSである. 最長共通部分系列(LCS) 定理16.1(LCSの部分構造の最適性) Proof:(1)背理法. のとき でないなら, しかし, なので は最長ではない…矛盾 はLCS? も背理法で. LCSじゃないと仮定→LCSであるWを仮定→矛盾. 最長共通部分系列(LCS) 定理16.1(LCSの部分構造の最適性) Proof:(2)背理法. , のとき, が のLCS? LCSじゃないと仮定→LCSであるWを仮定→矛盾. (3)も対称的に同じ. 最長共通部分系列(LCS) 動的計画法が使えるか? 部分構造の最適性 ○ 部分問題の再起解 解を再帰的に表現したい. 先ほどの最適性を使って表現する. 系列 と のLCSの長さを として, 最長共通部分系列(LCS) 動的計画法を使うと 異なる部分問題は 通りしかない 最適値をボトムアップに計算する. 0 0 0 0 0 0 0 最適解の構成は? 0 0 0 0 1 1 1 右下から見る 0 1 1 1 1 2 2 一致すれば左上に 一致しない 0 1 1 2 2 2 2 この手法で 0 1 1 1 2 3 3 なら左に なら上に 0 1 2 2 2 3 3 0 1 2 2 3 3 4 時間. 0 1 2 2 3 4 4 最適三角形分割問題 ある凸な多角形を考える この多角形の頂点と頂点とを結び,複数の三角 形に分割することを考える. その分割した三角形で定義できる重みを考える 例:(総辺長,内接円の半径,…) 三角形全てに対する重みの和を最小にする三角 形分割を求める 最適三角形分割問題 どう考えるか? 解析木という考え方 解を木構造で表現 辺 を根, その他の既存の辺を葉, 引いた辺を節として, 三角形が一つの親子になる 木を構成する 一つの解が一意に一つの 解析木と対応付け. 最適三角形分割問題 解析木は 部分構造の最適性 がある!→動的計画法. 実は… 連鎖行列積も解析木を持つ 連鎖行列積は最適三角形 分割問題の特殊例. 確認すると… 最適三角形分割問題 連鎖行列積そのものは(当然ながら)使えない. 同じ考え方で再帰を作る 多角形 の 最適三角形分割の重みを とすると, 動的計画法まとめ 動的計画法は再帰的に最適性がある問題に使 える. 部分構造の最適性 →問題を小さく考える事ができた 部分問題の重複性 →記憶することで時間コストを下げる 解析木を作れるなら動的計画法が使える. しかしながら,ある一定の記憶領域と時間を必 要とする(線形時間や対数領域は無理)
© Copyright 2024 ExpyDoc