Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

36,661 views

Published on

アルゴリズムイントロダクション輪講用の発表資料。

Published in: Education
  • ..............ACCESS that WEBSITE Over for All Ebooks ................ ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { https://urlzs.com/UABbn } ......................................................................................................................... Download Full EPUB Ebook here { https://urlzs.com/UABbn } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes.........ACCESS WEBSITE Over for All Ebooks ..... (Unlimited) ......................................................................................................................... Download FULL PDF EBOOK here { https://urlzs.com/UABbn } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • ..............ACCESS that WEBSITE Over for All Ebooks ................ ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { https://urlzs.com/UABbn } ......................................................................................................................... Download Full EPUB Ebook here { https://urlzs.com/UABbn } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { https://urlzs.com/UABbn } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you want to download or read this book, Copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... Download Doc Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

  1. 1. 動的計画法 2009/3/2 id:nitoyon アルゴリズムイントロダクション 15 章
  2. 2. 動的計画法 (dynamic programming) 部分問題 を ボトムアップ に 解いて 統合 する
  3. 3. 動的計画法のアルゴリズム <ul><li>最適解 の 構造 を 特徴 づける </li></ul><ul><li>最適解 の 値 を 再帰的 に 定義 する </li></ul><ul><li>ボトムアップ に 最適解 の 値 を 求 める </li></ul><ul><li>最適解 を 構成 する </li></ul>
  4. 4. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
  5. 5. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
  6. 6. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 15.1 組み立てライン スケジューリング
  7. 7. 問題 <ul><li>車を組み立てる 2つのライン がある </li></ul>ライン1 ライン2 入口 出口
  8. 8. 問題 <ul><li>車を組み立てる 2つのライン がある </li></ul><ul><li>各ライン には n 個 の ステーション S 1, j 、 S 2, j がある </li></ul>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 個
  9. 9. 問題 <ul><li>車を組み立てる 2つのライン がある </li></ul><ul><li>各ライン には n 個 の ステーション S 1, j 、 S 2, j がある </li></ul><ul><li>ステーション S i , j では 組立に a i , j 時間 かかる </li></ul>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
  10. 10. 問題 <ul><li>車を組み立てる 2つのライン がある </li></ul><ul><li>各ライン には n 個 の ステーション S 1, j 、 S 2, j がある </li></ul><ul><li>ステーション S i , j では 組立に a i , j 時間 かかる </li></ul>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を通過する時間 =
  11. 11. 問題 <ul><li>車を組み立てる 2つのライン がある </li></ul><ul><li>各ライン には n 個 の ステーション S 1, j 、 S 2, j がある </li></ul><ul><li>ステーション S i , j では 組立に a i , j 時間 かかる </li></ul><ul><li>ラインを変える には t i , j 時間 かかる </li></ul>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
  12. 12. 問題 <ul><li>車を組み立てる 2つのライン がある </li></ul><ul><li>各ライン には n 個 の ステーション S 1, j 、 S 2, j がある </li></ul><ul><li>ステーション S i , j では 組立に a i , j 時間 かかる </li></ul><ul><li>ラインを変える には t i , j 時間 かかる -> 最短時間の順路 を 求める </li></ul>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
  13. 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. 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. 15. 総当り作戦 の 破綻 <ul><li>ある道筋 の コスト を 計算 するには -> O ( n ) </li></ul><ul><li>全て の 道筋 は -> 2 n 通り </li></ul>総当り には Ω (2 n ) 必要 ※ Ω(2 n ) = 少なくとも 2 n の 計算量 を要する
  16. 16. 1. 最適解の構造を 特徴づける
  17. 17. ステーション S 1, j を 最速 で 終了 する 順路 が <ul><li>S 1, j -1 を 経由 していた 場合 </li></ul>S 1, j -1 S 2, j -1 S 1, j 入口
  18. 18. ステーション S 1, j を 最速 で 終了 する 順路 が <ul><li>S 1, j -1 を 経由 していた 場合 </li></ul><ul><ul><li>S 1, j -1 を 最速 で 終了 する 順路 を 辿ってきた </li></ul></ul>入口 S 1, j -1 S 2, j -1 S 1, j
  19. 19. なぜならば <ul><li>もっと速く S 1, j -1 に到達する道 が あるなら、 この順路 を使って S 1, j に もっと速く着ける </li></ul>入口 S 1, j -1 S 2, j -1 S 1, j 矛盾
  20. 20. 同様に…
  21. 21. ステーション S 1, j を 最速 で 終了 する 順路 が <ul><li>S 1, j -1 を 経由 していた 場合 </li></ul><ul><ul><li>S 1, j -1 を 最速 で 終了 する 順路 を 辿ってきた </li></ul></ul><ul><li>S 2, j -1 を 経由 していた 場合 </li></ul><ul><ul><li>S 2, j -1 を 最速 で 終了 する 順路 を 辿ってきた </li></ul></ul><ul><li>j =1 のとき </li></ul><ul><ul><li>1 通り </li></ul></ul>S 1, j -1 S 2, j -1 S 1, j
  22. 22. ステーション S 1, j を 最速 で 終了 する 順路 が <ul><li>S 1, j -1 を 経由 していた 場合 </li></ul><ul><ul><li>S 1, j -1 を 最速 で 終了 する 順路 を 辿ってきた </li></ul></ul><ul><li>S 2, j -1 を 経由 していた 場合 </li></ul><ul><ul><li>S 2, j -1 を 最速 で 終了 する 順路 を 辿ってきた </li></ul></ul><ul><li>j =1 のとき </li></ul><ul><ul><li>1 通り </li></ul></ul>S 1, j -1 S 2, j -1 S 1, j 問題 の 最適解 部分問題 の 最適解
  23. 23. 部分問題最適性 問題 の 最適解 に 部分問題 の 最適解 が 含 まれる
  24. 24. 2. 最適解 の 値 を 再帰的 に 定義 する
  25. 25. 最適解 の 値 f i [ j ] = 入口 から S i, j までの 最短時間 S 1, j -1 S 2, j -1 S 1, j 入口 t 2, j -1
  26. 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. 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. 28. 3. ボトムアップ に 最適解 の 値 を 求 める
  29. 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. 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. 31. F ASTEST -W AY( a , t , e , x , n ) 最適解 の 値 を 計算 f i [ j ] を 計算 初期値 を 設定
  32. 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. 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. 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. 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. 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. 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. 38. 4. 最適解 を 構成 する
  39. 39. <ul><li>l *, l [ j ] から順路を出力する </li></ul>P RINT- S TATIONS ( l , l *, n )
  40. 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. 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. 42. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
  43. 43. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 15.2 連鎖行列積
  44. 44. 問題 <ul><li>行列積 A 1 A 2 … A n の計算量を小さくしたい </li></ul>
  45. 45. 問題 <ul><li>行列積 A 1 A 2 … A n の計算量を小さくしたい </li></ul><ul><ul><li>演算結果は括弧付けの順番に寄らない </li></ul></ul><ul><ul><ul><li>( A 1 ( A 2 ( A 3 A 4 ))) </li></ul></ul></ul><ul><ul><ul><li>( A 1 (( A 2 A 3 ) A 4 )) </li></ul></ul></ul><ul><ul><ul><li>(( A 1 A 2 )( A 3 A 4 )) </li></ul></ul></ul><ul><ul><ul><li>(( A 1 ( A 2 A 3 )) A 4 ) </li></ul></ul></ul><ul><ul><ul><li>((( A 1 A 2 ) A 3 ) A 4 ) </li></ul></ul></ul>
  46. 46. 問題 <ul><li>行列積 A 1 A 2 … A n の計算量を小さくしたい </li></ul><ul><ul><li>演算結果は括弧付けの順番に寄らない </li></ul></ul><ul><ul><ul><li>( A 1 ( A 2 ( A 3 A 4 ))) : 右から </li></ul></ul></ul><ul><ul><ul><li>( A 1 (( A 2 A 3 ) A 4 )) : 中右左の順 </li></ul></ul></ul><ul><ul><ul><li>(( A 1 A 2 )( A 3 A 4 )) : 左右を先に </li></ul></ul></ul><ul><ul><ul><li>(( A 1 ( A 2 A 3 )) A 4 ) : 中左右の順 </li></ul></ul></ul><ul><ul><ul><li>((( A 1 A 2 ) A 3 ) A 4 ) : 左から </li></ul></ul></ul>
  47. 47. 問題 <ul><li>行列積 A 1 A 2 … A n の計算量を小さくしたい </li></ul><ul><ul><li>演算結果は括弧付けの順番に寄らない </li></ul></ul><ul><ul><li>計算量は括弧付けの順番に依存する </li></ul></ul>A ( p × q 行列 ) と B ( q × r 行列 ) の 積 で は、 pqr 回 の 掛け算 が 実施 される
  48. 48. <ul><li>行列積 A 1 A 2 … A n の計算量を小さくしたい </li></ul><ul><ul><li>演算結果は括弧付けの順番に寄らない </li></ul></ul><ul><ul><li>計算量は括弧付けの順番に依存する </li></ul></ul>問題 ( 例 ) 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
  49. 49. <ul><li>行列積 A 1 A 2 … A n の計算量を小さくしたい </li></ul><ul><ul><li>演算結果は括弧付けの順番に寄らない </li></ul></ul><ul><ul><li>計算量は括弧付けの順番に依存する </li></ul></ul>問題 (( 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 行列 )
  50. 50. <ul><li>行列積 A 1 A 2 … A n の計算量を小さくしたい </li></ul><ul><ul><li>演算結果は括弧付けの順番に寄らない </li></ul></ul><ul><ul><li>計算量は括弧付けの順番に依存する </li></ul></ul><ul><li>-> A 1 A 2 … A n の 乗算回数 を 最小化 する 括弧付け を 決定 する </li></ul><ul><ul><li>A i の 次元 は p i -1 × p i </li></ul></ul>問題
  51. 51. 括弧付けの個数 P ( n ) : N 個 の 行列 に対する 括弧付け の 個数 総当り には Ω (4 n / n 3/2 ) 必要
  52. 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. 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. 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) + × × × +
  55. 55. 1. 最適解の構造を 特徴づける
  56. 56. A i A i +1 … A j の 最適括弧付け が <ul><li>A k と A k +1 で 分割すると仮定する </li></ul>A i A i +1 … A k A k +1 … A j
  57. 57. A i A i +1 … A j の 最適括弧付け が <ul><li>A k と A k +1 で 分割すると仮定する </li></ul>A i A i +1 … A k A k +1 … A j 部分括弧付け は A i … A k の 最適括弧付け となっている 部分括弧付け は A k +1 … A j の 最適括弧付け となっている
  58. 58. <ul><li>より良い 括弧付け があれば それを使って A i A i +1 … A j を より良くできる </li></ul>なぜならば A i A i +1 … A k A k +1 … A j より良い括弧付け
  59. 59. <ul><li>より良い 括弧付け があれば それを使って A i … A j を より良くできる </li></ul>なぜならば A i A i +1 … A k A k +1 … A j より良い括弧付け A i A i +1 … A j が 最適括弧付け であることと 矛盾
  60. 60. 部分問題最適性 問題 ( A i A i +1 … A j ) の 最適解 に 部分問題 ( A i … A k と A k+ 1 … A j ) の 最適解 が 含 まれる
  61. 61. 2. 最適解 の 値 を 再帰的 に 定義 する
  62. 62. 最適解 の 値 m [ i, j ] = A i … A j の 計算 に 必要 な スカラ乗算 の 最小回数 A i A i +1 … A k A k +1 … A j
  63. 63. 最適解 の 値 <ul><li>最適解 は A k と A k +1 で 分割 する と仮定する </li></ul>m [ i, j ] = A i … A j の 計算 に 必要 な スカラ乗算 の 最小回数 A i A i +1 … A k A k +1 … A j
  64. 64. 最適解 の 値 <ul><li>最適解 は A k と A k +1 で 分割 する と仮定する </li></ul>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
  65. 65. 未知 の 値 k を 求 める <ul><li>全ての k を 調 べて 最良 のものを 選択 する </li></ul>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)
  66. 66. 3. ボトムアップ に 最適解 の 値 を 求 める
  67. 67. 再帰 だと 指数時間 が 必要 -> 理由は 15.3 にて
  68. 68. 部分問題 の 数 が 少 ない <ul><li>1 ≦ i ≦ k ≦ n を 満たす部分問題 の 個数 は </li></ul><ul><ul><li>n C 2 + n =Θ( n 2 ) 通り </li></ul></ul><ul><li>再帰 の 途中 で 同じ部分問題 が 繰り返し 表れる </li></ul>部分問題重複性
  69. 69. そこで ボトムアップ に
  70. 70. M ATRIX- C HAIN- O RDER( p ) 初期値 を 設定 連鎖長 が l のもので ループ m [ i , j ] を 求める
  71. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 85. アルゴリズムの評価 <ul><li>計算量 </li></ul><ul><ul><li>3 重ループなので O ( n 3 ) </li></ul></ul><ul><ul><li>Ω( n 3 ) -> 練習問題 15.2-4 </li></ul></ul><ul><li>メモリ消費量 </li></ul><ul><ul><li>Θ( n 2 ) </li></ul></ul>
  86. 86. 4. 最適解 を 構成 する
  87. 87. <ul><li>s [ i , j ] から 最適解 を 構成 する </li></ul>P RINT- O PTIMAL- P ARENS ( s , i , j )
  88. 88. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
  89. 89. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 15.3 動的計画法の基本要素
  90. 90. 15.3 の目次 <ul><li>部分構造最適性 </li></ul><ul><ul><li>発見の手順 </li></ul></ul><ul><ul><li>特徴・計算量 </li></ul></ul><ul><ul><li>間違 って 発見 しないように : 独立 </li></ul></ul><ul><li>部分問題重複性 </li></ul><ul><ul><li>重複問題の個数 </li></ul></ul><ul><ul><li>最適解の再構成 </li></ul></ul><ul><ul><li>メモ化 </li></ul></ul>
  91. 91. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 部分構造最適性
  92. 92. 部分構造最適性 を 発見 する 手順 <ul><li>問題の解 が ある選択 から 構成 されていることを 観察 する。 </li></ul><ul><li>最適解 を 導 く 選択 が 与 えられている と 仮定 する。 </li></ul><ul><li>選択 から 生 ずる 部分問題 を 決定 する。 部分問題 の 空間 を 特徴づける 。 </li></ul><ul><li>部分問題 の 解 が 最適解 であることを 決定 する。 </li></ul>
  93. 93. 例題 1 、例題 2 で 考 える <ul><li>問題の解 が ある選択 から 構成 されていることを 観察 する。 </li></ul><ul><li>最適解 を 導 く 選択 が 与 えられている と 仮定 する。 </li></ul><ul><li>選択 から 生 ずる 部分問題 を 決定 する。 部分問題 の 空間 を 特徴づける 。 </li></ul>
  94. 94. 例題 1 、例題 2 で 考 える <ul><li>部分問題 の 解 が 最適解 であることを 決定 する。 切り貼り法 を使って 証明 する (最適ではないと仮定して矛盾を導く) </li></ul>
  95. 95. 例題 1 、例題 2 で 考 える <ul><li>部分問題 の 解 が 最適解 であることを 決定 する。 切り貼り法 を使って 証明 する (最適ではないと仮定して矛盾を導く) </li></ul>
  96. 96. 部分構造最適性 を 発見 する 手順 <ul><li>問題の解 が ある選択 から 構成 されていることを 観察 する。 </li></ul><ul><li>最適解 を 導 く 選択 が 与 えられている と 仮定 する。 </li></ul><ul><li>選択 から 生 ずる 部分問題 を 決定 する。 部分問題 の 空間 を 特徴づける 。 </li></ul><ul><li>部分問題 の 解 が 最適解 であることを 決定 する。 </li></ul>どのように?
  97. 97. 部分問題 の 空間 の 特徴づけ を得る方法 <ul><li>最初 は できるだけ簡単 に 仮定 する </li></ul><ul><li>必要 に 応じて拡張 する </li></ul><ul><li>組み立てラインスケジューリング の 場合 </li></ul><ul><li>S 1, j と S 2, j を 仮定 </li></ul>うまく行く
  98. 98. 部分問題 の 空間 の 特徴づけ を得る方法 <ul><li>最初 は できるだけ簡単 に 仮定 する </li></ul><ul><li>必要 に 応じて拡張 する </li></ul><ul><li>連鎖行列積 の 場合 </li></ul><ul><li>A 1 A 2 … A j を 部分問題 の 空間 として 仮定していれば… </li></ul>A k と A k +1 で 分割 するとき 部分問題 A 1 … A k と A k +1 … A j を 生じる 部分問題 の 空間 に 含 まれない
  99. 99. 特徴量 <ul><li>元々与えられた問題の最適解が利用する部分問題の個数 </li></ul><ul><li>最適解が利用する部分問題の候補の個数 </li></ul>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. 部分問題の個数
  100. 100. 計算時間 <ul><li>部分問題の総数 </li></ul><ul><li>各部分問題の候補数 </li></ul>高々 n 2 2. 候補数 O ( n 3 ) Θ( n ) 合計 Θ( n 2 ) 連鎖行列積 Θ( n ) 組み立てラインスケジューリング 1. 部分問題の総数
  101. 101. 貪欲アルゴリズム との 比較 <ul><li>共通点 </li></ul><ul><ul><li>どちらも 部分問題最適性 を利用する </li></ul></ul><ul><li>違うところ </li></ul><ul><ul><li>動的計画法 = ボトムアップ </li></ul></ul><ul><ul><li>貪欲アルゴリズム = トップダウン </li></ul></ul>
  102. 102. 間違えて部分問題最適性を 仮定しないために <ul><li>有向グラフ G =( V , E ) で 以下 の 問題 を 考 える </li></ul><ul><ul><li>重みなし最短 ( 単純 ) 路 </li></ul></ul><ul><ul><li>重みなし最長単純路 </li></ul></ul>単純路 = ループ や 多重辺 を 含 まない
  103. 103. 重みなし最短路問題 <ul><li>部分構造最適性を持つ </li></ul><ul><ul><li>p 1 は u から w への 最短路 </li></ul></ul><ul><ul><li>もし そうでないならば、 最短路 を p 1 ’ とすれば p 1 ’ と p 2 を 組み合わせて より 最短 な 経路 を 作成 できる </li></ul></ul>
  104. 104. 重みなし最長単純路問題 <ul><li>部分構造最適性を持たない </li></ul><ul><ul><li>( 反例 ) </li></ul></ul>q -> t への 最長路 部分問題 q -> r への 最長路 部分問題 r -> t への 最長路 2 3 3 q s r t q s r t q s r t
  105. 105. 重みなし最長単純路問題 <ul><li>動的計画法ではとけない </li></ul><ul><li>NP 問題 </li></ul><ul><ul><li>多項式時間でも解けていない </li></ul></ul>
  106. 106. 違いは「 独立 」 <ul><li>最短単純路 : 独立 </li></ul><ul><li>最長単純路 : 独立でない </li></ul>独立 = 部分問題の解 が 別の部分問題の解 に 影響を与えない
  107. 107. 最長単純路 は 「 独立」 か? <ul><li>2つ の 最適解 を 組み合わせると、 経路 は 単純 でなくなる </li></ul>部分問題 q -> r への 最長路 部分問題 r -> t への 最長路 3 3 部分問題の最適解が別の問題へ影響を与えている q s r t q s r t
  108. 108. 最短路は 「単純」 か? <ul><li>2つ の 部分問題 は w 以外 の 点 を 共有 しない ので 「単純」 </li></ul><ul><li>もし w 以外 の 点 x を 共有 すると </li></ul><ul><ul><li>u -> x -> w -> x -> v </li></ul></ul><ul><ul><li>x -> w -> x を ショートカット すれば、より 最短 な 経路になる </li></ul></ul><ul><ul><li>矛盾! </li></ul></ul>
  109. 109. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 部分問題重複性
  110. 110. 部分問題重複性 の 性質 <ul><li>再帰の仮定で同じ問題が何度も出てくる </li></ul><ul><ul><li>動的計画法では部分問題の解を表に記録することで対応する </li></ul></ul><ul><li>分割統治法 </li></ul><ul><ul><li>再帰の仮定で新しい問題が生まれる </li></ul></ul>
  111. 111. 連鎖行列積 を 再帰 で 解 いたら… <ul><li>T ( n ) := 再帰で解いた場合の計算時間 </li></ul>
  112. 112. 連鎖行列積 を 再帰 で 解 いたら… (2) <ul><li>置き換え法で T ( n )=Ω(2 n ) を証明する </li></ul>つまり… 少なくとも 2 n の 計算量!
  113. 113. 最適解の再構成 「 最適解の値」 を求めたあとに「 最適解」 を求める <ul><li>組み立てラインスケジューリング の 場合 </li></ul><ul><ul><li>直前のステーション を l i [ j ] に 記録 した </li></ul></ul><ul><ul><li>l i [ j ] がなくても、 わずかな計算 O ( n ) で 再構成 できる </li></ul></ul><ul><ul><ul><li>f 1 [ j ] = f 1 [ j -1]+ a 1 ならば S 1, j を 経由 </li></ul></ul></ul><ul><ul><ul><li>f 1 [ j ] = f 2 [ j -1]+t 2, j -1 + a 1 ならば S 2, j を 経由 </li></ul></ul></ul><ul><li>連鎖行列積問題 の 場合 </li></ul><ul><ul><li>直前の分割 を s [ i , j] に 記録 した </li></ul></ul><ul><ul><li>s [ i , j] を 利用しないと、再構成には Θ( j - i ) が必要 </li></ul></ul><ul><ul><li>s [ i , j] があれば O (1) で計算できる </li></ul></ul>
  114. 114. メモ化 (memoize) <ul><li>再帰の過程で計算結果を覚えておく </li></ul><ul><li>重複する部分問題を O (1) で思い出せる </li></ul>O ( n 3 ) 再帰 + メモ化 2 n O ( n 3 ) 連鎖行列積 再帰のみ 動的計画法
  115. 115. 動的計画法 v.s. 再帰+メモ化 <ul><li>全ての部分問題を解く必要がある場合 </li></ul><ul><ul><li>動的計画法の方が優れている </li></ul></ul><ul><ul><li>再帰のオーバーヘッドが少ない </li></ul></ul><ul><ul><li>時間や表の領域を節約するアルゴリズムもある </li></ul></ul><ul><li>一部の部分問題を解く必要がない場合 </li></ul><ul><ul><li>再帰+メモ化は不要な問題を解かなくてよい </li></ul></ul>
  116. 116. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
  117. 117. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 15.4 最長共通 部分系列
  118. 118. 問題 <ul><li>DNA の 塩基 がどれぐらい 一致 しているか 知 りたい </li></ul><ul><li>最長部分系列 を求める </li></ul>
  119. 119. 問題 <ul><li>DNA の 塩基 がどれぐらい 一致 しているか 知 りたい </li></ul><ul><li>最長部分系列 を求める </li></ul><ul><ul><li>部分系列 とは X = 〈 x 1 , x 2 ,…, x m 〉 の 部分系列 が Z = 〈 z 1 , z 2 ,…, z k 〉 であるとは、 増加する添え字の列〈 i 1 , i 2 ,… i k 〉 が 存在 し、 x i j = z j を 満 たす。 </li></ul></ul>X = 〈 A , B , C , B , D , A , B 〉 Z = 〈 B , C , D , B 〉 部分系列
  120. 120. 問題 <ul><li>DNA の 塩基 がどれぐらい 一致 しているか 知 りたい </li></ul><ul><li>最長部分系列 を求める </li></ul><ul><ul><li>部分系列 とは X = 〈 x 1 , x 2 ,…, x m 〉 の 部分系列 が Z = 〈 z 1 , z 2 ,…, z k 〉 であるとは、 増加する添え字の列〈 i 1 , i 2 ,… i k 〉 が 存在 し、 x i j = z j を 満 たす。 </li></ul></ul>X = 〈 A , B , C , B , D , A , B 〉 Z = 〈 B , C , D , B 〉 〈 2, 3, 5, 7 〉 部分系列
  121. 121. 問題 <ul><li>DNA の 塩基 がどれぐらい 一致 しているか 知 りたい </li></ul><ul><li>最長部分系列 を求める </li></ul><ul><ul><li>部分系列 とは X = 〈 x 1 , x 2 ,…, x m 〉 の 部分系列 が Z = 〈 z 1 , z 2 ,…, z k 〉 であるとは、 増加する添え字の列〈 i 1 , i 2 ,… i k 〉 が 存在 し、 x i j = z j を 満 たす。 </li></ul></ul><ul><ul><li>共通部分系列 とは 2つの系列の共通する部分系列 </li></ul></ul>X = 〈 A , B , C , B , D , A , B 〉 Y = 〈 B , D , C , A , B , A 〉 〈 B , C , A 〉 は 共通部分系列
  122. 122. 問題 <ul><li>DNA の 塩基 がどれぐらい 一致 しているか 知 りたい </li></ul><ul><li>最長部分系列 を求める </li></ul><ul><ul><li>部分系列 とは X = 〈 x 1 , x 2 ,…, x m 〉 の 部分系列 が Z = 〈 z 1 , z 2 ,…, z k 〉 であるとは、 増加する添え字の列〈 i 1 , i 2 ,… i k 〉 が 存在 し、 x i j = z j を 満 たす。 </li></ul></ul><ul><ul><li>共通部分系列 とは 2つの系列の共通する部分系列 </li></ul></ul>X = 〈 A , B , C , B , D , A , B 〉 Y = 〈 B , D , C , A , B , A 〉 〈 B , C , A 〉 は 共通部分系列
  123. 123. 問題 <ul><li>DNA の 塩基 がどれぐらい 一致 しているか 知 りたい </li></ul><ul><li>最長部分系列 を求める </li></ul><ul><ul><li>部分系列 とは X = 〈 x 1 , x 2 ,…, x m 〉 の 部分系列 が Z = 〈 z 1 , z 2 ,…, z k 〉 であるとは、 増加する添え字の列〈 i 1 , i 2 ,… i k 〉 が 存在 し、 x i j = z j を 満 たす。 </li></ul></ul><ul><ul><li>共通部分系列 とは 2つの系列の共通する部分系列 </li></ul></ul>X = 〈 A , B , C , B , D , A , B 〉 Y = 〈 B , D , C , A , B , A 〉 最長部分系列 (LCS) は 〈 B , C , A, B 〉 と 〈 B , D , A, B 〉
  124. 124. 問題 <ul><li>DNA の 塩基 がどれぐらい 一致 しているか 知 りたい </li></ul><ul><li>最長部分系列 を求める </li></ul><ul><ul><li>部分系列 とは X = 〈 x 1 , x 2 ,…, x m 〉 の 部分系列 が Z = 〈 z 1 , z 2 ,…, z k 〉 であるとは、 増加する添え字の列〈 i 1 , i 2 ,… i k 〉 が 存在 し、 x i j = z j を 満 たす。 </li></ul></ul><ul><ul><li>共通部分系列 とは 2つの系列の共通する部分系列 </li></ul></ul><ul><ul><li>最長共通部分系列問題 とは X = 〈 x 1 , x 2 ,…, x m 〉 と Y = 〈 y 1 , y 2 ,…, y n 〉の 最長共通部分系列 (LCS) を求める </li></ul></ul>
  125. 125. 総当り作戦 の 破綻 <ul><li>X の部分系列の個数 -> O (2 m ) </li></ul>総当り には Ω (2 m ) 必要
  126. 126. 1. 最適解の構造を 特徴づける
  127. 127. LCS の 部分構造最適性 <ul><li>X = 〈 x 1 , x 2 ,…, x m 〉 と Y = 〈 y 1 , y 2 ,…, y n 〉 の LCS が Z = 〈 z 1 , z 2 ,…, z k 〉 であると 仮定 すると </li></ul><ul><li>x m = y n ならば z k = x m = y n であり、 Z k -1 は X m -1 と Y n -1 の LCS である </li></ul><ul><li>x m ≠ y n のとき、 z k ≠ x m ならば Z は X m -1 と Y の LCS である </li></ul><ul><li>x m ≠ y n のとき、 z k ≠ y n ならば Z は X と Y n -1 の LCS である </li></ul>接頭語 X i = 〈 x 1 , x 2 ,…, x i 〉とする
  128. 128. 2. 最適解 の 値 を 再帰的 に 定義 する
  129. 129. LCS を求める手順 <ul><li>x m = y n のとき </li></ul><ul><ul><li>X m -1 と Y n -1 の LCS を 求める </li></ul></ul><ul><li>x m ≠ y n のとき </li></ul><ul><ul><li>「 X m -1 と Y の LCS 」と「 X と Y n -1 の LCS 」 の 長い ほうを 採用する </li></ul></ul>部分問題の部分問題を共有している -> 部分問題重複性
  130. 130. 最適解 の 値 c [ i , j ] = X i と Y j の LCS の 長さ ※ 利用しない部分問題が存在する
  131. 131. 3. ボトムアップ に 最適解 の 値 を 求 める
  132. 132. 動的計画法 の 利用 <ul><li>再帰(メモ化なし)で計算すると指数時間 </li></ul><ul><li>部分問題の個数は Θ( nm ) 個のみ </li></ul>動的計画法で ボトムアップ ( 昇順 ) に 解く
  133. 133. LCS-L ENGTH( X , Y ) 左上から1つ ずつ計算 i =0, j =0 を設定
  134. 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. 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. 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. 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. 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. 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. 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. 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. 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. 143. 4. 最適解 を 構成 する
  144. 144. P RINT- LCS ( b , X , i , j )
  145. 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. 146. コードの改善 <ul><li>b [ i , j ] を 利用しない </li></ul><ul><ul><li>c [ i, j ] の 矢印 の 方向 は O (1) で求められる </li></ul></ul><ul><ul><li>最適解の構成に要する時間: O ( m + n ) </li></ul></ul><ul><ul><li>メモリ量の節約: Θ( mn ) </li></ul></ul><ul><li>c [ i , j ] の メモリ量 を 削減 する </li></ul><ul><ul><li>直前 の 行 c [ i -1, j ] のみを 覚えて おけばよい </li></ul></ul><ul><ul><li>最適解の値 (長さ)のみを 求めればよい 場合 </li></ul></ul><ul><ul><li>メモリ量の節約: Θ( mn ) </li></ul></ul>↑ 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
  147. 147. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5
  148. 148. 15 章の構成 例 題 1 例 題 2 一 般 化 例 題 3 例 題 4 15.1 15.2 15.3 15.4 15.5 15.5 最適2分 探索木
  149. 149. 問題 <ul><li>2分探索木 T を 最小の時間 で 探索 したい </li></ul>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
  150. 150. 問題 <ul><li>2分探索木 T を 最小の時間 で 探索 したい </li></ul>k 2 k 1 k 4 k 3 k 5 d 0 d 1 d 2 d 3 d 4 d 5 <ul><li>d i (ダミーキー)を 導入 </li></ul><ul><li>d 0 : k 1 未満 の 全て の 値 </li></ul><ul><li>d i : k i < d i < k i +1 を 満 たす 全て の 値 </li></ul><ul><li>d n : k n より 大きい全て の 値 </li></ul>
  151. 151. 問題 <ul><li>2分探索木 T を 最小の時間 で 探索 したい </li></ul>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
  152. 152. 問題 <ul><li>2分探索木 T を 最小の時間 で 探索 したい </li></ul>k 2 k 1 k 4 k 3 k 5 d 0 d 1 d 2 d 3 d 4 d 5 この値 を 最小化 する T を 求 める
  153. 153. 総当り作戦 の 破綻 <ul><li>全ての2分木の個数 -> Ω(4 n / n 3/2 ) </li></ul>総当り は 非現実的
  154. 154. 1. 最適解の構造を 特徴づける
  155. 155. 最適 2 分探索木 T が <ul><li>キー k i ,… k j を含む部分木 T ’ を持つとする </li></ul>k x k r k i k j T ’ T’ は キー k 1 ,…, k j と ダミーキー d i ,…, d j から定義される 部分問題 の 最適解
  156. 156. なぜならば <ul><li>もっと期待値が小さい部分木 T ’’ が あるなら、 この部分木 を使って T をよりよくできる </li></ul>矛盾 k x k r k i k j T ’’ T が 最適 2 分探索木 で あることと
  157. 157. 部分問題最適性 を 利用 する <ul><li>キー k i ,… k j の 根 を k r とする </li></ul>k r 左部分木 k i ,…, k r -1 右部分木 k r +1 ,…, k j 全 ての k r に 対 して 左部分木 と 右部分木 の 最適 2 分探索木 を 決定 する <ul><li>r = i のとき </li></ul><ul><li>左部分木 は d i -1 のみを 含む </li></ul><ul><li>r = j のとき </li></ul><ul><li>右部分木 は d j のみを 含む </li></ul>※
  158. 158. 2. 最適解 の 値 を 再帰的 に 定義 する
  159. 159. 最適解 の 値 e [ i , j ] = キー ki ,… kj を含む 最適 2 分探索木 の探索コストの期待値 最終目的: e [1, n ] を求める
  160. 160. 最適解の値を求める <ul><li>部分木の深さが1増えると 探索コストの期待値は 部分木の中の確率の和だけ増加する </li></ul><ul><li>k r が キー k i ,… k j を 含む 最適 2 部分探索木 の 根であるとき </li></ul>
  161. 161. 未知 の 値 k を 求 める root [ i , j ] を k r の 添え字 と定義する
  162. 162. 3. ボトムアップ に 最適解 の 値 を 求 める
  163. 163. O PTIMAL- BST ( p , q , n )
  164. 164. アルゴリズムの評価 <ul><li>計算量 </li></ul><ul><ul><li>3 重ループなので O ( n 3 ) </li></ul></ul><ul><ul><li>Ω( n 3 ) -> 練習問題 15.2-4 </li></ul></ul><ul><li>メモリ消費量 </li></ul><ul><ul><li>Θ( n 2 ) </li></ul></ul>
  165. 165. ご清聴ありがとうございました

×