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

プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~Takuya Akiba
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門Yoichi Iwata
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題tmaehara
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムTakuya Akiba
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化yosupo
 
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~Yuma Inoue
 
ダブリング
ダブリングダブリング
ダブリングsatanic
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)AtCoder Inc.
 
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjpcocodrips
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズムTakuya Akiba
 

What's hot (20)

プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
 
Binary indexed tree
Binary indexed treeBinary indexed tree
Binary indexed tree
 
Nazoki
NazokiNazoki
Nazoki
 
WUPC2012
WUPC2012WUPC2012
WUPC2012
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
 
最大流 (max flow)
最大流 (max flow)最大流 (max flow)
最大流 (max flow)
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~
 
ダブリング
ダブリングダブリング
ダブリング
 
RMQ クエリ処理
RMQ クエリ処理RMQ クエリ処理
RMQ クエリ処理
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
全域木いろいろ
全域木いろいろ全域木いろいろ
全域木いろいろ
 
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
 
abc032
abc032abc032
abc032
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 

Viewers also liked

プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法Takuya Akiba
 
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)AtCoder Inc.
 
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)AtCoder Inc.
 
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)AtCoder Inc.
 
深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶしAtCoder Inc.
 
hbstudy 74 Site Reliability Engineering
hbstudy 74 Site Reliability Engineeringhbstudy 74 Site Reliability Engineering
hbstudy 74 Site Reliability EngineeringRyuji Tamagawa
 

Viewers also liked (9)

簡単そうで難しい組合せ最適化
簡単そうで難しい組合せ最適化簡単そうで難しい組合せ最適化
簡単そうで難しい組合せ最適化
 
全探索
全探索全探索
全探索
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
 
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & 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章 動的計画法

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

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_2024koheioishi1
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ssusere0a682
 
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 JavaScriptyuitoakatsukijp
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 

Recently uploaded (6)

The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #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
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 

アルゴリズムイントロダクション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.