SlideShare a Scribd company logo
1 of 165
動的計画法 2009/3/2 id:nitoyon アルゴリズムイントロダクション  15 章
動的計画法 (dynamic programming) 部分問題 を ボトムアップ に 解いて 統合 する
動的計画法のアルゴリズム ,[object Object],[object Object],[object Object],[object Object]
15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 15.1  組み立てライン スケジューリング
問題 ,[object Object],ライン1 ライン2 入口 出口
問題 ,[object Object],[object Object],S 1,1 入口 出口 S 2,1 S 1,2 S 2,2 S 1,3 S 2,3 S 1, n -1 S 2, n -1 S 1, n S 2, n ・・・ n 個
問題 ,[object Object],[object Object],[object Object],a 1,1 入口 出口 a 2,1 a 1,2 a 2,2 a 1,3 a 2,3 a 1, n -1 a 2, n -1 a 1, n a 2, n ・・・ e 1 e 2 x 1 x 2
問題 ,[object Object],[object Object],[object Object],a 1,1 入口 出口 a 2,1 a 1,2 a 2,2 a 1,3 a 2,3 a 1, n -1 a 2, n -1 a 1, n a 2, n ・・・ e 1 e 2 x 1 x 2 ( 例 )   ライン1を通過する時間  =
問題 ,[object Object],[object Object],[object Object],[object Object],a 1,1 入口 出口 a 2,1 a 1,2 a 2,2 a 1,3 a 2,3 a 1, n -1 a 2, n -1 a 1, n a 2, n ・・・ t 1,1 t 2,1 t 1,2 t 2,2 t 1, n -1 t 2, n -1 e 1 e 2 x 1 x 2
問題 ,[object Object],[object Object],[object Object],[object Object],a 1,1 入口 出口 a 2,1 a 1,2 a 2,2 a 1,3 a 2,3 a 1, n -1 a 2, n -1 a 1, n a 2, n ・・・ t 1,1 t 2,1 t 1,2 t 2,2 t 1, n -1 t 2, n -1 e 1 e 2 x 1 x 2
例  ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2
例  ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 2 + 7 + 2 + 5 + 1 + 3 + 1 + 4 + 5 + 1 + 4 + 3 =38
総当り作戦 の 破綻 ,[object Object],[object Object],総当り には Ω (2 n ) 必要 ※ Ω(2 n )  =  少なくとも   2 n  の 計算量 を要する
1. 最適解の構造を 特徴づける
ステーション S 1, j   を 最速 で 終了 する 順路 が ,[object Object],S 1, j -1 S 2, j -1 S 1, j 入口
ステーション S 1, j   を 最速 で 終了 する 順路 が ,[object Object],[object Object],入口 S 1, j -1 S 2, j -1 S 1, j
なぜならば ,[object Object],入口 S 1, j -1 S 2, j -1 S 1, j 矛盾
同様に…
ステーション S 1, j   を 最速 で 終了 する 順路 が ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],S 1, j -1 S 2, j -1 S 1, j
ステーション S 1, j   を 最速 で 終了 する 順路 が ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],S 1, j -1 S 2, j -1 S 1, j 問題 の 最適解 部分問題 の 最適解
部分問題最適性 問題 の 最適解 に 部分問題 の 最適解 が 含 まれる
2.  最適解 の 値 を 再帰的 に 定義 する
最適解 の 値 f i [   j   ]  = 入口 から   S i,   j   までの 最短時間 S 1, j -1 S 2, j -1 S 1, j 入口 t 2,  j -1
最適解 の 値 f 1 [   j   ] = a 1, j -1 a 2, j -1 S 1, j 入口 t 2,  j -1 e 1 + a 1,1 min(  f 1 [   j -1]   +   a 1 ,j -1 ,  f 2 [   j -1]+ a 2, j -1 + t 2,   j -1 ) ( j= 1) ( j >1) f 1 [ j -1]
最適解 の 値 f 1 [   j   ] = e 1 + a 1,1 min(  f 1 [   j -1]   +   a 1 ,j -1 ,  f 2 [   j -1]+ a 2, j -1 + t 2,   j -1 ) ( j= 1) ( j> 1) f 2 [   j   ] = e 2 + a 2,1 min(  f 2 [   j -1]   +   a 2 ,j -1 ,  f 1 [   j -1]+ a 1, j -1 + t 1,   j -1 ) ( j= 1) ( j >1) 同様 に… f*  = min( f 1 [   n ]   +   x 1 ,   f 2 [ n ] +  x 2 ) 求めたい最適解 の 値 は…
3. ボトムアップ に 最適解 の 値 を 求 める
再帰 を そのまま解 くと・・・ O (2 n ) f 1 [   j   ] = e 1 + a 1,1 min(  f 1 [   j -1]   +   a 1 ,j -1 ,  f 2 [   j -1]+ a 2, j -1 + t 2,   j -1 ) ( j= 1) ( j> 1) f 2 [   j   ] = e 2 + a 2,1 min(  f 2 [   j -1]   +   a 2 ,j -1 ,  f 1 [   j -1]+ a 1, j -1 + t 1,   j -1 ) ( j= 1) ( j >1) f*  = min( f 1 [   n ]   +   x 1 ,   f 2 [ n ] +  x 2 )
再帰 を そのまま解 くと・・・ O (2 n ) f 1 [   j   ] = e 1 + a 1,1 min(  f 1 [   j -1]   +   a 1 ,j -1 ,  f 2 [   j -1]+ a 2, j -1 + t 2,   j -1 ) ( j= 1) ( j> 1) f 2 [   j   ] = e 2 + a 2,1 min(  f 2 [   j -1]   +   a 2 ,j -1 ,  f 1 [   j -1]+ a 1, j -1 + t 1,   j -1 ) ( j= 1) ( j >1) f*  = min( f 1 [   n ]   +   x 1 ,   f 2 [ n ] +  x 2 ) ボトムアップ ( 昇順 ) に 解く
F ASTEST -W AY( a , t , e , x , n ) 最適解 の 値 を 計算 f i [ j ] を 計算 初期値 を 設定
例  ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 f 1 [ j ] 2 1 4 3 5 f 2 [ j ] 6 j
例  ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 9 f 1 [ j ] 2 12 1 4 3 5 f 2 [ j ] 6 j
例  ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 18 9 f 1 [ j ] 2 12 1 4 3 5 f 2 [ j ] 6 j
例  ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 18 9 f 1 [ j ] 16 2 12 1 4 3 5 f 2 [ j ] 6 j
例  ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 20 18 9 f 1 [ j ] 16 2 12 1 4 22 3 5 f 2 [ j ] 6 j
例  ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 35 32 24 20 18 9 f 1 [ j ] 16 2 12 1 25 4 22 3 30 5 37 f 2 [ j ] 6 j
4.  最適解 を 構成 する
[object Object],P RINT- S TATIONS ( l ,  l *,  n )
例  ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 35 32 24 20 18 9 f 1 [ j ] 16 2 12 1 25 4 22 3 30 5 37 f 2 [ j ] 6 j
例  ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 35 32 24 20 18 9 f 1 [ j ] 16 2 12 1 25 4 22 3 30 5 37 f 2 [ j ] 6 j
15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 15.2   連鎖行列積
問題 ,[object Object]
問題 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
問題 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
問題 ,[object Object],[object Object],[object Object],A ( p × q 行列 )  と   B ( q × r 行列 )  の 積 で は、 pqr 回 の 掛け算 が 実施 される
[object Object],[object Object],[object Object],問題 ( 例 )   A 1 (10×100 行列 )  A 2 (100×5 行列 )  A 3 (5×50 行列 ) (( A 1 A 2 ) A 3 )  : 10×100×5+10×5×50 ( A 1 ( A 2 A 3 ))  : 100×5×50+10×100×50
[object Object],[object Object],[object Object],問題 (( A 1 A 2 ) A 3 )  : 10×100×5+10×5×50 ( A 1 ( A 2 A 3 ))  : 100×5×50+10×100×50 =  7,500 = 75,000 ( 例 )   A 1 (10×100 行列 )  A 2 (100×5 行列 )  A 3 (5×50 行列 )
[object Object],[object Object],[object Object],[object Object],[object Object],問題
括弧付けの個数 P ( n )  :  N 個 の 行列 に対する 括弧付け の 個数 総当り には Ω (4 n / n 3/2 ) 必要
括弧付けの個数 ( A 1 ( A 2 ( A 3 A 4 ))) ( A 1 (( A 2 A 3 ) A 4 )) P (4)  :  4 個 の 行列 に対する 括弧付け の 個数 (( A 1 A 2 )( A 3 A 4 )) (( A 1 ( A 2 A 3 )) A 4 ) ((( A 1 A 2 ) A 3 ) A 4 )
括弧付けの個数 ( A 1 ( A 2 ( A 3 A 4 ))) ( A 1 (( A 2 A 3 ) A 4 )) P (4)  :  4 個 の 行列 に対する 括弧付け の 個数 (( A 1 A 2 )( A 3 A 4 )) (( A 1 ( A 2 A 3 )) A 4 ) ((( A 1 A 2 ) A 3 ) A 4 ) P (1) P (3) P (3) P (1) P (2) P (2)
括弧付けの個数 ( A 1 ( A 2 ( A 3 A 4 ))) ( A 1 (( A 2 A 3 ) A 4 )) P (4)  :  4 個 の 行列 に対する 括弧付け の 個数 (( A 1 A 2 )( A 3 A 4 )) (( A 1 ( A 2 A 3 )) A 4 ) ((( A 1 A 2 ) A 3 ) A 4 ) P (1) P (3) P (3) P (1) P (2) P (2) + × × × +
1. 最適解の構造を 特徴づける
A i A i +1 … A j の 最適括弧付け が ,[object Object],A i   A i +1 …  A k  A k +1 …  A j
A i A i +1 … A j の 最適括弧付け が ,[object Object],A i   A i +1 …  A k  A k +1 …  A j 部分括弧付け は A i … A k の 最適括弧付け となっている 部分括弧付け は A k +1 … A j の 最適括弧付け となっている
[object Object],なぜならば A i   A i +1 …  A k  A k +1 …  A j より良い括弧付け
[object Object],なぜならば A i   A i +1 …  A k  A k +1 …  A j より良い括弧付け A i A i +1 … A j  が 最適括弧付け であることと 矛盾
部分問題最適性 問題 ( A i A i +1 … A j ) の 最適解 に 部分問題 ( A i … A k  と  A k+ 1 … A j ) の 最適解 が 含 まれる
2.  最適解 の 値 を 再帰的 に 定義 する
最適解 の 値 m [ i, j ]   = A i … A j の 計算 に 必要 な スカラ乗算 の 最小回数 A i   A i +1 …  A k  A k +1 …  A j
最適解 の 値 ,[object Object],m [ i, j ]   = A i … A j の 計算 に 必要 な スカラ乗算 の 最小回数 A i   A i +1 …  A k  A k +1 …  A j
最適解 の 値 ,[object Object],m [ i, j ]   = A i … A j の 計算 に 必要 な スカラ乗算 の 最小回数 A i   A i +1 …  A k   A k +1 …  A j m [ i, j ]   =  m [ i ,  k ]  +  m [ k +1,  j ]  +  p i -1 p k p j
未知 の 値  k  を 求 める ,[object Object],m [ i ,   j   ]  = 0 min( m [ i ,  k ] +  m [ k +1,  j ]+ p i -1 p k p j ) 0≦ k ≦ j ( j= 1) ( j >1)
3. ボトムアップ に 最適解 の 値 を 求 める
再帰 だと 指数時間 が 必要 -> 理由は 15.3 にて
部分問題 の 数 が 少 ない ,[object Object],[object Object],[object Object],部分問題重複性
そこで ボトムアップ に
M ATRIX- C HAIN- O RDER( p ) 初期値 を 設定 連鎖長 が l のもので ループ m [ i ,  j ] を 求める
図で考える m [1,1] m [1,2] m [1,3] m [2,2] m [2,3] m [3,3] m [4,4] m [3,4] m [2,4] m [1,4] m [2,5] m [3,5] m [4,5] m [5,5] m [1,5] A 1 A 2 A 3 A 4 A 5
図で考える m [1,1] m [1,2] m [1,3] m [2,2] m [2,3] m [3,3] m [4,4] m [3,4] m [2,4] m [1,4] m [2,5] m [3,5] m [4,5] m [5,5] m [1,5] i =1 A 1 A 2 A 3 A 4 A 5 l j =3
0 0 0 0 0 A 1 30×35 A 2 35×15 A 3 15×10 A 4 10×20 A 5 20×25
0 i =1 j =2 0 i =2 j =3 0 0 i =3 j =4 i =4 j =5 0 A 1 30×35 A 2 35×15 A 3 15×10 A 4 10×20 A 5 20×25
0 15,750 0 0 0 0 A 1 30×35 A 2 35×15 A 3 15×10 A 4 10×20 A 5 20×25
0 15,750 0 2,625 0 0 750 1,000 0 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20
0 15,750 i =1 j= 3 0 2,625 0 0 750 1,000 0 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20 min( m [1,  k ] +  m [ k +1, 3]+ p 0 p k p 3 ) 1≦ k ≦ 2
0 15,750 7,875 0 2,625 0 0 750 1,000 0 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20 min( m [1,  k ] +  m [ k +1, 3]+ p 0 p k p 3 ) 1≦ k ≦ 2 k =1 7,875
0 15,750 7,875 0 2,625 0 0 750 1,000 0 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20 min( m [1,  k ] +  m [ k +1, 3]+ p 0 p k p 3 ) 1≦ k ≦ 2 k =2 18,000 k =1 7,875
0 15,750 7,875 0 2,625 0 0 750 4,375 2,500 1,000 0 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20
0 15,750 7,875 0 2,625 0 0 750 4,375 i =1 j =4 2,500 1,000 0 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20 min( m [1,  k ] +  m [ k +1, 4]+ p 0 p k p 4 ) 1≦ k ≦3
0 15,750 7,875 0 2,625 0 0 750 4,375 9,375 2,500 1,000 0 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20 min( m [1,  k ] +  m [ k +1, 4]+ p 0 p k p 4 ) 1≦ k ≦3
0 15,750 7,875 0 2,625 0 0 750 4,375 9,375 7,125 2,500 1,000 0 11,875 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20
0 15,750 7,875 0 2,625 0 0 750 4,375 9,375 7,125 2,500 1,000 0 11,875 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20 m [1, 5] 最適解の値
アルゴリズムの評価 ,[object Object],[object Object],[object Object],[object Object],[object Object]
4.  最適解 を 構成 する
[object Object],P RINT- O PTIMAL- P ARENS   ( s ,  i ,  j )
15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 15.3   動的計画法の基本要素
15.3 の目次 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 部分構造最適性
部分構造最適性 を 発見 する 手順 ,[object Object],[object Object],[object Object],[object Object]
例題 1 、例題 2 で 考 える ,[object Object],[object Object],[object Object]
例題 1 、例題 2 で 考 える ,[object Object]
例題 1 、例題 2 で 考 える ,[object Object]
部分構造最適性 を 発見 する 手順 ,[object Object],[object Object],[object Object],[object Object],どのように?
部分問題 の 空間 の 特徴づけ を得る方法 ,[object Object],[object Object],[object Object],[object Object],うまく行く
部分問題 の 空間 の 特徴づけ を得る方法 ,[object Object],[object Object],[object Object],[object Object],A k  と  A k +1   で 分割 するとき 部分問題   A 1 … A k  と  A k +1 … A j  を 生じる 部分問題 の 空間 に 含 まれない
特徴量 ,[object Object],[object Object],j  -  i ( k = i , i +1,…,  j ) 2 ( A i … A k  と  A k +1 … A j ) 連鎖行列積 2 ( S 1, j   と S 2, j ) 1 ( S 1, j   もしくは S 2, j ) 組み立てラインスケジューリング 2.  候補の個数 1.  部分問題の個数
計算時間 ,[object Object],[object Object],高々 n 2 2.  候補数 O ( n 3 ) Θ( n ) 合計 Θ( n 2 ) 連鎖行列積 Θ( n ) 組み立てラインスケジューリング 1.  部分問題の総数
貪欲アルゴリズム との 比較 ,[object Object],[object Object],[object Object],[object Object],[object Object]
間違えて部分問題最適性を 仮定しないために ,[object Object],[object Object],[object Object],単純路  =  ループ や 多重辺 を 含 まない
重みなし最短路問題 ,[object Object],[object Object],[object Object]
重みなし最長単純路問題 ,[object Object],[object Object],q -> t   への 最長路 部分問題 q -> r   への 最長路 部分問題 r -> t   への 最長路 2 3 3 q s r t q s r t q s r t
重みなし最長単純路問題 ,[object Object],[object Object],[object Object]
違いは「 独立 」 ,[object Object],[object Object],独立  = 部分問題の解 が 別の部分問題の解 に 影響を与えない
最長単純路 は 「 独立」 か? ,[object Object],部分問題 q -> r   への 最長路 部分問題 r -> t   への 最長路 3 3 部分問題の最適解が別の問題へ影響を与えている q s r t q s r t
最短路は 「単純」 か? ,[object Object],[object Object],[object Object],[object Object],[object Object]
15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 部分問題重複性
部分問題重複性 の 性質 ,[object Object],[object Object],[object Object],[object Object]
連鎖行列積 を 再帰 で 解 いたら… ,[object Object]
連鎖行列積 を 再帰 で 解 いたら… (2) ,[object Object],つまり… 少なくとも  2 n の 計算量!
最適解の再構成 「 最適解の値」 を求めたあとに「 最適解」 を求める ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
メモ化  (memoize) ,[object Object],[object Object],O ( n 3 ) 再帰 + メモ化 2 n O ( n 3 ) 連鎖行列積 再帰のみ 動的計画法
動的計画法  v.s.   再帰+メモ化 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 15.4   最長共通 部分系列
問題 ,[object Object],[object Object]
問題 ,[object Object],[object Object],[object Object],X = 〈 A ,  B ,  C ,  B ,  D ,  A ,  B 〉 Z = 〈 B ,  C ,  D ,  B 〉 部分系列
問題 ,[object Object],[object Object],[object Object],X = 〈 A ,  B ,  C ,  B ,  D ,  A ,  B 〉 Z = 〈 B ,  C ,  D ,  B 〉 〈 2,  3,  5,  7 〉 部分系列
問題 ,[object Object],[object Object],[object Object],[object Object],X = 〈 A ,  B ,  C ,  B ,  D ,  A ,  B 〉 Y = 〈 B ,  D ,  C ,  A ,  B ,  A 〉 〈 B ,  C ,  A 〉   は 共通部分系列
問題 ,[object Object],[object Object],[object Object],[object Object],X = 〈 A ,  B ,  C ,  B ,  D ,  A ,  B 〉 Y = 〈 B ,  D ,  C ,  A ,  B ,  A 〉 〈 B ,  C ,  A 〉   は 共通部分系列
問題 ,[object Object],[object Object],[object Object],[object Object],X = 〈 A ,  B ,  C ,  B ,  D ,  A ,  B 〉 Y = 〈 B ,  D ,  C ,  A ,  B ,  A 〉 最長部分系列 (LCS) は 〈 B ,  C ,  A, B 〉 と 〈 B ,  D ,  A, B 〉
問題 ,[object Object],[object Object],[object Object],[object Object],[object Object]
総当り作戦 の 破綻 ,[object Object],総当り には Ω (2 m ) 必要
1. 最適解の構造を 特徴づける
LCS の 部分構造最適性 ,[object Object],[object Object],[object Object],[object Object],接頭語  X i = 〈 x 1 , x 2 ,…, x i 〉とする
2.  最適解 の 値 を 再帰的 に 定義 する
LCS を求める手順 ,[object Object],[object Object],[object Object],[object Object],部分問題の部分問題を共有している -> 部分問題重複性
最適解 の 値 c   [ i ,  j   ]  = X i  と  Y j  の LCS の 長さ ※ 利用しない部分問題が存在する
3. ボトムアップ に 最適解 の 値 を 求 める
動的計画法 の 利用 ,[object Object],[object Object],動的計画法で ボトムアップ ( 昇順 ) に 解く
LCS-L ENGTH( X , Y ) 左上から1つ ずつ計算 i =0,  j =0 を設定
例  (p35) i =0,  j =0  を 初期化 0 B 5 0 0 0 0 0 0 x i 0 0 B 4 0 B 7 0 A 6 0 D 5 0 C 3 0 B 2 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
例  (p35) i =1,  j =1  のとき x i ≠ y j ,  c [ i -1, j ]≧ c [ i , j -1] 0 B 5 0 0 0 0 0 0 x i 0 0 B 4 0 B 7 0 A 6 0 D 5 0 C 3 0 B 2 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
例  (p35) i =1,  j =2  のとき x i ≠ y j ,  c [ i -1, j ]≧ c [ i , j -1] 0 B 5 0 0 0 0 0 0 x i 0 0 B 4 0 B 7 0 A 6 0 D 5 0 C 3 0 B 2 ↑ 0 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
例  (p35) i =1,  j =3  のとき x i ≠ y j ,  c [ i -1, j ]≧ c [ i , j -1] 0 B 5 0 0 0 0 0 0 x i 0 0 B 4 0 B 7 0 A 6 0 D 5 0 C 3 0 B 2 ↑ 0 ↑ 0 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
例  (p35) i =1,  j =4  のとき x i = y j 0 B 5 0 0 0 0 0 0 x i 0 0 B 4 0 B 7 0 A 6 0 D 5 0 C 3 0 B 2 ↖  1 ↑ 0 ↑ 0 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
例  (p35) i =1,  j =5  のとき x i ≠ y j ,  c [ i -1, j ]< c [ i , j -1] ← 1 0 B 5 0 0 0 0 0 0 x i 0 0 B 4 0 B 7 0 A 6 0 D 5 0 C 3 0 B 2 ↖  1 ↑ 0 ↑ 0 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
例  (p35) i =1,  j =5  のとき x i = y j ← 1 0 B 5 0 0 0 0 0 0 x i 0 0 B 4 0 B 7 0 A 6 0 D 5 0 C 3 0 B 2 ↖  1 ↖  1 ↑ 0 ↑ 0 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
例  (p35) ↖  2 ← 1 0 B 5 0 0 0 0 0 0 x i 0 0 B 4 0 B 7 0 A 6 0 D 5 0 C 3 ← 2 ↑ 1 ← 1 ← 1 ↖  1   0 B 2 ↖  1 ↖  1 ↑ 0 ↑ 0 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
例  (p35) ↖  4 ↑ 3 ↑ 3 ↖  3 ↑ 2 ↖  2 ← 1 0 B 5 0 0 0 0 0 0 x i 0 ← 3 ↑ 2 ↑ 2 ↑ 1 ↖  1 0 B 4 ↑ 4 ↑ 3 ↑ 2 ↑ 2 ↖  1 0 B 7 ↖  4 ↑ 3 ↑ 2 ↑ 2 ↑ 1 0 A 6 ↑ 3 ↑ 3 ↑ 2 ↖  2 ↑ 1 0 D 5 ↑ 2 ← 2 ↖  2 ↑ 1 ↑ 1 0 C 3 ← 2 ↑ 1 ← 1 ← 1 ↖  1   0 B 2 ↖  1 ↖  1 ↑ 0 ↑ 0 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
4.  最適解 を 構成 する
P RINT- LCS ( b , X , i , j )
例  (p35) ↖  4 ↑ 3 ↑ 3 ↖  3 ↑ 2 ↖  2 ← 1 0 B 5 0 0 0 0 0 0 x i 0 ← 3 ↑ 2 ↑ 2 ↑ 1 ↖  1 0 B 4 ↑ 4 ↑ 3 ↑ 2 ↑ 2 ↖  1 0 B 7 ↖  4 ↑ 3 ↑ 2 ↑ 2 ↑ 1 0 A 6 ↑ 3 ↑ 3 ↑ 2 ↖  2 ↑ 1 0 D 5 ↑ 2 ← 2 ↖  2 ↑ 1 ↑ 1 0 C 3 ← 2 ↑ 1 ← 1 ← 1 ↖  1   0 B 2 ↖  1 ↖  1 ↑ 0 ↑ 0 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
コードの改善 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],↑ 2 B 5 x i 0 ↑ 1 ↖  1 0 B 4 B 7 A 6 D 5 ↑ 2 ← 2 ↖  2 ↑ 1 ↑ 1 0 C 3 B 2 A 1 A A C D B y j i 6 4 3 2 1 0 j
15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 15.5  最適2分 探索木
問題 ,[object Object],k 2 k 1 k 4 k 3 k 5 k i を 検索 する 確率 : pi 0.20 0.10 0.05 0.10 0.15 p i 5 4 3 2 1 i
問題 ,[object Object],k 2 k 1 k 4 k 3 k 5 d 0 d 1 d 2 d 3 d 4 d 5 ,[object Object],[object Object],[object Object],[object Object]
問題 ,[object Object],k 2 k 1 k 4 k 3 k 5 d 0 d 1 d 2 d 3 d 4 d 5 k i を 検索 する 確率 : p i d i を 検索 する 確率 : q i 0.05 0 0.10 0.05 0.05 0.05 0.10 q i 0.20 0.10 0.05 0.10 0.15 p i 5 4 3 2 1 i
問題 ,[object Object],k 2 k 1 k 4 k 3 k 5 d 0 d 1 d 2 d 3 d 4 d 5 この値 を 最小化 する T を 求 める
総当り作戦 の 破綻 ,[object Object],総当り は 非現実的
1. 最適解の構造を 特徴づける
最適 2 分探索木 T が ,[object Object],k x k r k i k j T ’ T’ は キー k 1 ,…, k j と ダミーキー d i ,…, d j から定義される 部分問題 の 最適解
なぜならば ,[object Object],矛盾 k x k r k i k j T ’’ T   が 最適 2 分探索木 で あることと
部分問題最適性 を 利用 する ,[object Object],k r 左部分木 k i ,…, k r -1 右部分木 k r +1 ,…, k j 全 ての  k r  に 対 して 左部分木 と 右部分木 の 最適 2 分探索木 を 決定 する ,[object Object],[object Object],[object Object],[object Object],※
2.  最適解 の 値 を 再帰的 に 定義 する
最適解 の 値 e [ i ,  j   ]  = キー  ki ,… kj  を含む 最適 2 分探索木 の探索コストの期待値 最終目的:  e [1,  n ]  を求める
最適解の値を求める ,[object Object],[object Object]
未知 の 値  k  を 求 める root [ i ,  j ]  を  k r  の 添え字 と定義する
3. ボトムアップ に 最適解 の 値 を 求 める
O PTIMAL- BST ( p , q , n )
アルゴリズムの評価 ,[object Object],[object Object],[object Object],[object Object],[object Object]
ご清聴ありがとうございました

More Related Content

What's hot

プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
 

What's hot (20)

プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 
双対性
双対性双対性
双対性
 
ダブリング
ダブリングダブリング
ダブリング
 
Chokudai search
Chokudai searchChokudai search
Chokudai search
 
Rolling hash
Rolling hashRolling hash
Rolling hash
 
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
Indeedなう B日程 解説
Indeedなう B日程 解説Indeedなう B日程 解説
Indeedなう B日程 解説
 
直交領域探索
直交領域探索直交領域探索
直交領域探索
 
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』
 
RMQ クエリ処理
RMQ クエリ処理RMQ クエリ処理
RMQ クエリ処理
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
abc032
abc032abc032
abc032
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~
 
部内勉強会 数え上げの基礎
部内勉強会 数え上げの基礎部内勉強会 数え上げの基礎
部内勉強会 数え上げの基礎
 

Viewers also liked

Viewers also liked (8)

簡単そうで難しい組合せ最適化
簡単そうで難しい組合せ最適化簡単そうで難しい組合せ最適化
簡単そうで難しい組合せ最適化
 
全探索
全探索全探索
全探索
 
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
 
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
 
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
 
TCO2017R1
TCO2017R1TCO2017R1
TCO2017R1
 
深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし
 
hbstudy 74 Site Reliability Engineering
hbstudy 74 Site Reliability Engineeringhbstudy 74 Site Reliability Engineering
hbstudy 74 Site Reliability Engineering
 

Similar to アルゴリズムイントロダクション15章 動的計画法

Fiekppteste 130709205838-phpapp02
Fiekppteste 130709205838-phpapp02Fiekppteste 130709205838-phpapp02
Fiekppteste 130709205838-phpapp02
Arbenng
 
070 統計的推測 母集団と推定
070 統計的推測 母集団と推定070 統計的推測 母集団と推定
070 統計的推測 母集団と推定
t2tarumi
 
ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3
noname409
 

Similar to アルゴリズムイントロダクション15章 動的計画法 (20)

JOIss2020 発表資料
JOIss2020 発表資料JOIss2020 発表資料
JOIss2020 発表資料
 
C02
C02C02
C02
 
【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう
 
量子アニーリングを用いたクラスタ分析
量子アニーリングを用いたクラスタ分析量子アニーリングを用いたクラスタ分析
量子アニーリングを用いたクラスタ分析
 
FIEK provime pranuese teste.
FIEK provime pranuese teste.FIEK provime pranuese teste.
FIEK provime pranuese teste.
 
Fiekppteste 130709205838-phpapp02
Fiekppteste 130709205838-phpapp02Fiekppteste 130709205838-phpapp02
Fiekppteste 130709205838-phpapp02
 
公開鍵暗号2: NP困難性
公開鍵暗号2: NP困難性公開鍵暗号2: NP困難性
公開鍵暗号2: NP困難性
 
Sec15 dynamic programming
Sec15 dynamic programmingSec15 dynamic programming
Sec15 dynamic programming
 
ゼータへ続く素数の階段物語 第13回 数学カフェ「素数!!」
ゼータへ続く素数の階段物語 第13回 数学カフェ「素数!!」ゼータへ続く素数の階段物語 第13回 数学カフェ「素数!!」
ゼータへ続く素数の階段物語 第13回 数学カフェ「素数!!」
 
Nn bp formula
Nn bp formulaNn bp formula
Nn bp formula
 
これならわかる最適化数学8章_動的計画法
これならわかる最適化数学8章_動的計画法これならわかる最適化数学8章_動的計画法
これならわかる最適化数学8章_動的計画法
 
topology of musical data
topology of musical datatopology of musical data
topology of musical data
 
算数で体感する高度数学
算数で体感する高度数学算数で体感する高度数学
算数で体感する高度数学
 
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
 
公開鍵暗号(3): 離散対数問題
公開鍵暗号(3): 離散対数問題公開鍵暗号(3): 離散対数問題
公開鍵暗号(3): 離散対数問題
 
070 統計的推測 母集団と推定
070 統計的推測 母集団と推定070 統計的推測 母集団と推定
070 統計的推測 母集団と推定
 
ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3
 
高速フーリエ変換
高速フーリエ変換高速フーリエ変換
高速フーリエ変換
 
Stochastic complexities of reduced rank regression証明概略
 Stochastic complexities of reduced rank regression証明概略 Stochastic complexities of reduced rank regression証明概略
Stochastic complexities of reduced rank regression証明概略
 

Recently uploaded

The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
koheioishi1
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
YukiTerazawa
 

Recently uploaded (7)

東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScript
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 

アルゴリズムイントロダクション15章 動的計画法

  • 1. 動的計画法 2009/3/2 id:nitoyon アルゴリズムイントロダクション 15 章
  • 2. 動的計画法 (dynamic programming) 部分問題 を ボトムアップ に 解いて 統合 する
  • 3.
  • 4. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
  • 5. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
  • 6. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 15.1 組み立てライン スケジューリング
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13. 例 ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2
  • 14. 例 ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 2 + 7 + 2 + 5 + 1 + 3 + 1 + 4 + 5 + 1 + 4 + 3 =38
  • 15.
  • 17.
  • 18.
  • 19.
  • 21.
  • 22.
  • 23. 部分問題最適性 問題 の 最適解 に 部分問題 の 最適解 が 含 まれる
  • 24. 2. 最適解 の 値 を 再帰的 に 定義 する
  • 25. 最適解 の 値 f i [ j ] = 入口 から S i, j までの 最短時間 S 1, j -1 S 2, j -1 S 1, j 入口 t 2, j -1
  • 26. 最適解 の 値 f 1 [ j ] = a 1, j -1 a 2, j -1 S 1, j 入口 t 2, j -1 e 1 + a 1,1 min( f 1 [ j -1] + a 1 ,j -1 , f 2 [ j -1]+ a 2, j -1 + t 2, j -1 ) ( j= 1) ( j >1) f 1 [ j -1]
  • 27. 最適解 の 値 f 1 [ j ] = e 1 + a 1,1 min( f 1 [ j -1] + a 1 ,j -1 , f 2 [ j -1]+ a 2, j -1 + t 2, j -1 ) ( j= 1) ( j> 1) f 2 [ j ] = e 2 + a 2,1 min( f 2 [ j -1] + a 2 ,j -1 , f 1 [ j -1]+ a 1, j -1 + t 1, j -1 ) ( j= 1) ( j >1) 同様 に… f* = min( f 1 [ n ] + x 1 , f 2 [ n ] + x 2 ) 求めたい最適解 の 値 は…
  • 28. 3. ボトムアップ に 最適解 の 値 を 求 める
  • 29. 再帰 を そのまま解 くと・・・ O (2 n ) f 1 [ j ] = e 1 + a 1,1 min( f 1 [ j -1] + a 1 ,j -1 , f 2 [ j -1]+ a 2, j -1 + t 2, j -1 ) ( j= 1) ( j> 1) f 2 [ j ] = e 2 + a 2,1 min( f 2 [ j -1] + a 2 ,j -1 , f 1 [ j -1]+ a 1, j -1 + t 1, j -1 ) ( j= 1) ( j >1) f* = min( f 1 [ n ] + x 1 , f 2 [ n ] + x 2 )
  • 30. 再帰 を そのまま解 くと・・・ O (2 n ) f 1 [ j ] = e 1 + a 1,1 min( f 1 [ j -1] + a 1 ,j -1 , f 2 [ j -1]+ a 2, j -1 + t 2, j -1 ) ( j= 1) ( j> 1) f 2 [ j ] = e 2 + a 2,1 min( f 2 [ j -1] + a 2 ,j -1 , f 1 [ j -1]+ a 1, j -1 + t 1, j -1 ) ( j= 1) ( j >1) f* = min( f 1 [ n ] + x 1 , f 2 [ n ] + x 2 ) ボトムアップ ( 昇順 ) に 解く
  • 31. F ASTEST -W AY( a , t , e , x , n ) 最適解 の 値 を 計算 f i [ j ] を 計算 初期値 を 設定
  • 32. 例 ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 f 1 [ j ] 2 1 4 3 5 f 2 [ j ] 6 j
  • 33. 例 ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 9 f 1 [ j ] 2 12 1 4 3 5 f 2 [ j ] 6 j
  • 34. 例 ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 18 9 f 1 [ j ] 2 12 1 4 3 5 f 2 [ j ] 6 j
  • 35. 例 ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 18 9 f 1 [ j ] 16 2 12 1 4 3 5 f 2 [ j ] 6 j
  • 36. 例 ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 20 18 9 f 1 [ j ] 16 2 12 1 4 22 3 5 f 2 [ j ] 6 j
  • 37. 例 ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 35 32 24 20 18 9 f 1 [ j ] 16 2 12 1 25 4 22 3 30 5 37 f 2 [ j ] 6 j
  • 38. 4. 最適解 を 構成 する
  • 39.
  • 40. 例 ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 35 32 24 20 18 9 f 1 [ j ] 16 2 12 1 25 4 22 3 30 5 37 f 2 [ j ] 6 j
  • 41. 例 ( p .8 ) 7 入口 出口 8 9 5 3 6 8 5 4 7 2 2 3 1 4 1 2 4 3 2 4 4 1 2 3 2 35 32 24 20 18 9 f 1 [ j ] 16 2 12 1 25 4 22 3 30 5 37 f 2 [ j ] 6 j
  • 42. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
  • 43. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 15.2 連鎖行列積
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51. 括弧付けの個数 P ( n ) : N 個 の 行列 に対する 括弧付け の 個数 総当り には Ω (4 n / n 3/2 ) 必要
  • 52. 括弧付けの個数 ( A 1 ( A 2 ( A 3 A 4 ))) ( A 1 (( A 2 A 3 ) A 4 )) P (4) : 4 個 の 行列 に対する 括弧付け の 個数 (( A 1 A 2 )( A 3 A 4 )) (( A 1 ( A 2 A 3 )) A 4 ) ((( A 1 A 2 ) A 3 ) A 4 )
  • 53. 括弧付けの個数 ( A 1 ( A 2 ( A 3 A 4 ))) ( A 1 (( A 2 A 3 ) A 4 )) P (4) : 4 個 の 行列 に対する 括弧付け の 個数 (( A 1 A 2 )( A 3 A 4 )) (( A 1 ( A 2 A 3 )) A 4 ) ((( A 1 A 2 ) A 3 ) A 4 ) P (1) P (3) P (3) P (1) P (2) P (2)
  • 54. 括弧付けの個数 ( A 1 ( A 2 ( A 3 A 4 ))) ( A 1 (( A 2 A 3 ) A 4 )) P (4) : 4 個 の 行列 に対する 括弧付け の 個数 (( A 1 A 2 )( A 3 A 4 )) (( A 1 ( A 2 A 3 )) A 4 ) ((( A 1 A 2 ) A 3 ) A 4 ) P (1) P (3) P (3) P (1) P (2) P (2) + × × × +
  • 56.
  • 57.
  • 58.
  • 59.
  • 60. 部分問題最適性 問題 ( A i A i +1 … A j ) の 最適解 に 部分問題 ( A i … A k と A k+ 1 … A j ) の 最適解 が 含 まれる
  • 61. 2. 最適解 の 値 を 再帰的 に 定義 する
  • 62. 最適解 の 値 m [ i, j ] = A i … A j の 計算 に 必要 な スカラ乗算 の 最小回数 A i A i +1 … A k A k +1 … A j
  • 63.
  • 64.
  • 65.
  • 66. 3. ボトムアップ に 最適解 の 値 を 求 める
  • 67. 再帰 だと 指数時間 が 必要 -> 理由は 15.3 にて
  • 68.
  • 70. M ATRIX- C HAIN- O RDER( p ) 初期値 を 設定 連鎖長 が l のもので ループ m [ i , j ] を 求める
  • 71. 図で考える m [1,1] m [1,2] m [1,3] m [2,2] m [2,3] m [3,3] m [4,4] m [3,4] m [2,4] m [1,4] m [2,5] m [3,5] m [4,5] m [5,5] m [1,5] A 1 A 2 A 3 A 4 A 5
  • 72. 図で考える m [1,1] m [1,2] m [1,3] m [2,2] m [2,3] m [3,3] m [4,4] m [3,4] m [2,4] m [1,4] m [2,5] m [3,5] m [4,5] m [5,5] m [1,5] i =1 A 1 A 2 A 3 A 4 A 5 l j =3
  • 73. 0 0 0 0 0 A 1 30×35 A 2 35×15 A 3 15×10 A 4 10×20 A 5 20×25
  • 74. 0 i =1 j =2 0 i =2 j =3 0 0 i =3 j =4 i =4 j =5 0 A 1 30×35 A 2 35×15 A 3 15×10 A 4 10×20 A 5 20×25
  • 75. 0 15,750 0 0 0 0 A 1 30×35 A 2 35×15 A 3 15×10 A 4 10×20 A 5 20×25
  • 76. 0 15,750 0 2,625 0 0 750 1,000 0 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20
  • 77. 0 15,750 i =1 j= 3 0 2,625 0 0 750 1,000 0 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20 min( m [1, k ] + m [ k +1, 3]+ p 0 p k p 3 ) 1≦ k ≦ 2
  • 78. 0 15,750 7,875 0 2,625 0 0 750 1,000 0 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20 min( m [1, k ] + m [ k +1, 3]+ p 0 p k p 3 ) 1≦ k ≦ 2 k =1 7,875
  • 79. 0 15,750 7,875 0 2,625 0 0 750 1,000 0 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20 min( m [1, k ] + m [ k +1, 3]+ p 0 p k p 3 ) 1≦ k ≦ 2 k =2 18,000 k =1 7,875
  • 80. 0 15,750 7,875 0 2,625 0 0 750 4,375 2,500 1,000 0 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20
  • 81. 0 15,750 7,875 0 2,625 0 0 750 4,375 i =1 j =4 2,500 1,000 0 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20 min( m [1, k ] + m [ k +1, 4]+ p 0 p k p 4 ) 1≦ k ≦3
  • 82. 0 15,750 7,875 0 2,625 0 0 750 4,375 9,375 2,500 1,000 0 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20 min( m [1, k ] + m [ k +1, 4]+ p 0 p k p 4 ) 1≦ k ≦3
  • 83. 0 15,750 7,875 0 2,625 0 0 750 4,375 9,375 7,125 2,500 1,000 0 11,875 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20
  • 84. 0 15,750 7,875 0 2,625 0 0 750 4,375 9,375 7,125 2,500 1,000 0 11,875 A 1 30×35 A 2 35×15 A 3 15×5 A 4 5×10 A 5 10×20 m [1, 5] 最適解の値
  • 85.
  • 86. 4. 最適解 を 構成 する
  • 87.
  • 88. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
  • 89. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 15.3 動的計画法の基本要素
  • 90.
  • 91. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 部分構造最適性
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 部分問題重複性
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
  • 117. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 15.4 最長共通 部分系列
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 127.
  • 128. 2. 最適解 の 値 を 再帰的 に 定義 する
  • 129.
  • 130. 最適解 の 値 c [ i , j ] = X i と Y j の LCS の 長さ ※ 利用しない部分問題が存在する
  • 131. 3. ボトムアップ に 最適解 の 値 を 求 める
  • 132.
  • 133. LCS-L ENGTH( X , Y ) 左上から1つ ずつ計算 i =0, j =0 を設定
  • 134. 例 (p35) i =0, j =0 を 初期化 0 B 5 0 0 0 0 0 0 x i 0 0 B 4 0 B 7 0 A 6 0 D 5 0 C 3 0 B 2 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
  • 135. 例 (p35) i =1, j =1 のとき x i ≠ y j , c [ i -1, j ]≧ c [ i , j -1] 0 B 5 0 0 0 0 0 0 x i 0 0 B 4 0 B 7 0 A 6 0 D 5 0 C 3 0 B 2 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
  • 136. 例 (p35) i =1, j =2 のとき x i ≠ y j , c [ i -1, j ]≧ c [ i , j -1] 0 B 5 0 0 0 0 0 0 x i 0 0 B 4 0 B 7 0 A 6 0 D 5 0 C 3 0 B 2 ↑ 0 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
  • 137. 例 (p35) i =1, j =3 のとき x i ≠ y j , c [ i -1, j ]≧ c [ i , j -1] 0 B 5 0 0 0 0 0 0 x i 0 0 B 4 0 B 7 0 A 6 0 D 5 0 C 3 0 B 2 ↑ 0 ↑ 0 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
  • 138. 例 (p35) i =1, j =4 のとき x i = y j 0 B 5 0 0 0 0 0 0 x i 0 0 B 4 0 B 7 0 A 6 0 D 5 0 C 3 0 B 2 ↖ 1 ↑ 0 ↑ 0 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
  • 139. 例 (p35) i =1, j =5 のとき x i ≠ y j , c [ i -1, j ]< c [ i , j -1] ← 1 0 B 5 0 0 0 0 0 0 x i 0 0 B 4 0 B 7 0 A 6 0 D 5 0 C 3 0 B 2 ↖ 1 ↑ 0 ↑ 0 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
  • 140. 例 (p35) i =1, j =5 のとき x i = y j ← 1 0 B 5 0 0 0 0 0 0 x i 0 0 B 4 0 B 7 0 A 6 0 D 5 0 C 3 0 B 2 ↖ 1 ↖ 1 ↑ 0 ↑ 0 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
  • 141. 例 (p35) ↖ 2 ← 1 0 B 5 0 0 0 0 0 0 x i 0 0 B 4 0 B 7 0 A 6 0 D 5 0 C 3 ← 2 ↑ 1 ← 1 ← 1 ↖ 1 0 B 2 ↖ 1 ↖ 1 ↑ 0 ↑ 0 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
  • 142. 例 (p35) ↖ 4 ↑ 3 ↑ 3 ↖ 3 ↑ 2 ↖ 2 ← 1 0 B 5 0 0 0 0 0 0 x i 0 ← 3 ↑ 2 ↑ 2 ↑ 1 ↖ 1 0 B 4 ↑ 4 ↑ 3 ↑ 2 ↑ 2 ↖ 1 0 B 7 ↖ 4 ↑ 3 ↑ 2 ↑ 2 ↑ 1 0 A 6 ↑ 3 ↑ 3 ↑ 2 ↖ 2 ↑ 1 0 D 5 ↑ 2 ← 2 ↖ 2 ↑ 1 ↑ 1 0 C 3 ← 2 ↑ 1 ← 1 ← 1 ↖ 1 0 B 2 ↖ 1 ↖ 1 ↑ 0 ↑ 0 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
  • 143. 4. 最適解 を 構成 する
  • 144. P RINT- LCS ( b , X , i , j )
  • 145. 例 (p35) ↖ 4 ↑ 3 ↑ 3 ↖ 3 ↑ 2 ↖ 2 ← 1 0 B 5 0 0 0 0 0 0 x i 0 ← 3 ↑ 2 ↑ 2 ↑ 1 ↖ 1 0 B 4 ↑ 4 ↑ 3 ↑ 2 ↑ 2 ↖ 1 0 B 7 ↖ 4 ↑ 3 ↑ 2 ↑ 2 ↑ 1 0 A 6 ↑ 3 ↑ 3 ↑ 2 ↖ 2 ↑ 1 0 D 5 ↑ 2 ← 2 ↖ 2 ↑ 1 ↑ 1 0 C 3 ← 2 ↑ 1 ← 1 ← 1 ↖ 1 0 B 2 ↖ 1 ↖ 1 ↑ 0 ↑ 0 ↑ 0 0 A 1 A A C D B y j i 6 4 3 2 1 0 j
  • 146.
  • 147. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
  • 148. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 15.5 最適2分 探索木
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 155.
  • 156.
  • 157.
  • 158. 2. 最適解 の 値 を 再帰的 に 定義 する
  • 159. 最適解 の 値 e [ i , j ] = キー ki ,… kj を含む 最適 2 分探索木 の探索コストの期待値 最終目的: e [1, n ] を求める
  • 160.
  • 161. 未知 の 値 k を 求 める root [ i , j ] を k r の 添え字 と定義する
  • 162. 3. ボトムアップ に 最適解 の 値 を 求 める
  • 163. O PTIMAL- BST ( p , q , n )
  • 164.