データ構造とアルゴリズム

第十二回 (2014年12月12日)

動的計画法

http://www.sw.it.aoyama.ac.jp/2014/DA/lecture12.html

Martin J. Dürst

AGU

© 2009-14 Martin J. Dürst 青山学院大学

目次

 

前回の残り・まとめ

(Boyer-Moore のアルゴリズム、文字列照合と文字コード)

 

アルゴリズムの設計方針

 

動的計画法の概要

(dynamic programming)

1950 年代ごろに Richard Bellman によって提唱

 

動的計画法の単純な例

 

行列の乗算

 

三行列の連鎖乗算

 

乗算の順番の数

乗算の数 順番の数
0 1
1 1
2 2
3 5
4 14
5 42
6 132
7 429
8 1430
9 4862
 

 

乗算の最適な順番

 

最適化の順番と途中結果の記憶

 

計算の実例

0M1M5: 274
0M2M5: 450
0M3M5: 470
0M4M5: 320
0M1M4: 260
0M2M4: 468
0M3M4: 400
1M2M5: 366
1M3M5: 330
1M4M5: 250
  0M1M3: 200
0M2M3: 288
1M2M4: 360
1M3M4: 220
2M3M5: 330
2M4M5: 390
 
  0M1M2: 48 1M2M3: 120 2M3M4: 300 3M4M5: 150  
0M1: 0 1M2: 0 2M3: 0 3M4: 0 4M5: 0
r0 = 4 r1 = 2 r2 = 6 r3 = 10 r4 = 5 r5 = 3

 

連鎖乗算の最適化の計算量

動的計画法では問題の構造によって O(n3), O(n2), O(n),
O(nm) 等さまざまな計算量

 

動的計画法の概要 (再確認)

 

動的計画法の基本要素

 

Ruby による履歴管理

 

まとめ

 

宿題