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

第十一回 (2010年12月17日)

動的計画法

http://www.sw.it.aoyama.ac.jp/2010/DA/lecture11.html

Martin J. Dürst

AGU

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

目次

これからの予定

補講についての注意

前回の残り・まとめ

アルゴリズムの設計方針

動的計画法の概要

(dynamic programming)

動的計画法の単純な例

行列の乗算

三行列の連鎖乗算

乗算の順番の数

乗算の数 順番の数
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: 284
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 による履歴管理

まとめ

宿題 (レポート)

提出: 1月6日 (木) 19:00、O棟 529号室の前の箱; 3ページ程度; A4 両面左上ホチキス止め; 名前と学籍番号は一ページ目上部に記載 (表紙無し)

動的計画法のアルゴリズムで解決できる問題を調べ、その問題においての動的計画法のアルゴリズムを説明しなさい。

アルゴリズムの選び方: 8桁の学生番号を g として g%7 で下記のリストから選ぶ。
例: 15809099 % 7 = 5 ⇒ Algorithm by Knuth and Plass for line-breaking

0. Longest common subsequence

1. Longest increasing subsequence

2. Longest common substring

3. Levenshtein distance

4. Floyd-Warshall algorithm

5. Algorithm by Knuth and Plass for line-breaking

6. Bellman-Ford algorithm

注意点: