1 / 15

(0-1) ナップザック問題

(0-1) ナップザック問題. n 個の宝物 価値 p 1 , p 2 , ..., p n : 実数 重さ w 1 , w 2 , ..., w n : 実数   どろぼうの袋の最大積載量    limit : 実数 重さの和が limit 以下で,価値が最大となるように,品物を選べ. 制約  Σ n i=1 v i ・ w i ≦ limit v i =0 (盗まない) or 1 (盗む)( 1≦i≦n ) maximize Σ n i=1 v i ・ p i.

Download Presentation

(0-1) ナップザック問題

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. (0-1)ナップザック問題 • n個の宝物 価値 p1, p2, ..., pn : 実数 重さ w1, w2, ..., wn : 実数   どろぼうの袋の最大積載量    limit : 実数 • 重さの和がlimit以下で,価値が最大となるように,品物を選べ. • 制約 Σni=1vi・wi ≦ limit vi=0(盗まない) or 1(盗む)(1≦i≦n) • maximize Σni=1vi・pi p1 w1 p2 w2 p3 w3 p4 w4 limit

  2. ナップザック問題(例) n=5, limit=6 i 1 2 3 4 5 pi 2 5 4 9 6 wi 1 3 2 6 5 i 1 2 3 4 5 pi 2 7 4 3 8 wi 1 4 2 2 5 O(2n)時間かければ解ける.しかし,多項式時間アルゴリズムは知られていない. • おそらく,この問題を解く多項式時間アルゴリズムが存在しないだろう,という強い傍証がある(NP-hard). i=4 9 i=1,5 8 i=1,2,3 11 i=1,5 10 i=2,3 11 i=1,3,4 9

  3. しらみつぶし法 価値,残りの重み (0, 10) i=1を とらない i=1をとる i=2を とらない i=2を とらない (0,10) (5,9) (0, 10) (16, 2) (5, 9) (21, 1) (0, 10) (9.5, 5) (16, 2) (25.5, -3) (5, 9) (14.5, 4) (21, 1) (30.5, -4) (0,10)(7,6)(9.5,5)(16.5,1)(16,2)(23,-2) (5,9)(12,5)(14.5,4)(21.5,0)(21,1)(28,-3) i=2をとる i=2をとる

  4. 実数ナップザック問題 • n個の宝物 価値 p1, p2, ..., pn : 実数 重さ w1, w2, ..., wn : 実数   どろぼうの袋の最大積載量limit : 実数 • もし,宝物が砂金なら,... • 価値の密度 pi/wiの大きいものから取っていって,最後の宝物は入れられるだけ入れればよい(Greedyアルゴリズムで最適解が求まる).

  5. 分枝限定法 pi/wiでソートしておく 価値,残りの重み (0, 10) 0 2-4 limit 10 19.8<21.5 21.5 21.5 0 (5,9) (5, 9) (21, 1) (14.5, 4) (21, 1) (30.5, -4) (21.5,0)(21,1)(28,-3) 3-4 limit 9 5+16.5>21 21 4 limit 9 5+7<21.5 21 21 21.5 0 21 21 21.5 0 …探索しな くてよい 14.5<21.5

  6. 分枝限定法(アイディア) • 価値pi, 重さwiをそれぞれ、配列 p[i], w[i] に記憶しておく。p[i]/w[i] (価値の密度)で降順にソート。 branch&bound(i, p, w) { if (i>n) m=max(p, m) ;% このときのmが答(価値の最大値) else { if(w[i]<=w) branch&bound(i+1, p+p[i],w-w[i]); z=品物iを取らない場合の推測値 ; if (z+p>m) branch&bound(i+1, p, w) ; } • 推測値は、品物i+1~nに対して、limit wで実数ナップザック問題を解いて求める。

  7. 行列の乗算 A1A2…An (A1(A2(A3A4))), ((A1A2)(A3A4)), ((A1(A2A3 ))A4), ... A1 10×100 j k A2 100×5 i j A3 5×50 10×5 5×50要素の乗算回数 ijk回 ((A1A2) A3) 5,000+2,500=7,500 10×100 100×50 (A1 (A2A3)) 25,000+50,000=75,000 要素の乗算回数を最小にするには,どうしたらよいか? A1A2…Anの乗算の方法 1/(n+1)・2nCn∈O(4n/n3/2) しらみつぶしでは効率が悪い!

  8. 動的計画法(dynamic programming, DP) • m[i, j] AiAi+1...Aj (1≦i≦j≦n) を計算するのに必要な,要素の乗算回数の最小値. • A1 A2 ... An p0×p1 p1×p2 pn-1×pn • 例: m[2, 5] :以下の3つの中の最小値. A2(A3A4A5) m[2,2]+m[3,5]+p1p2p5 (A2A3)(A4A5) m[2,3]+m[4,5]+p1p3p5 (A2A3A4)A5 m[2,4]+m[5,5]+p1p4p5

  9. 動的計画法(核心部) 0 (i=jのとき) • m[i, j]=min{ m[i, k]+m[k+1, j]+pi-1pkpj | i≦k<j } (i<jのとき)

  10. 動的計画法(実行例) 6 5 4 3 2 1 j i 1 2 3 4 5 6 A1 A2 A3 A4 A5 A6 30×35 35×15 15×5 5×10 10×20 20×25

  11. 動的計画法(実行例) 6 5 4 3 2 1 j i 1 2 3 4 5 6 A1 A2 A3 A4 A5 A6 30×35 35×15 15×5 5×10 10×20 20×25

  12. 動的計画法(実行例) 6 5 4 3 2 1 j i 1 2 3 4 5 6 A1 A2 A3 A4 A5 A6 30×35 35×15 15×5 5×10 10×20 20×25

  13. 動的計画法(実行例) 6 5 4 3 2 1 j O(n3) i 1 2 3 4 5 6 A1 A2 A3 A4 A5 A6 30×35 35×15 15×5 5×10 10×20 20×25

  14. 動的計画法(実行例) 6 5 4 3 2 1 j m[i, j]/k ((A1(A2A3))((A4A5)A6)) i 1 2 3 4 5 6 A1 A2 A3 A4 A5 A6 30×35 35×15 15×5 5×10 10×20 20×25

  15. 動的計画法(詳細化アルゴリズム) for (w=0; w<n; w++) for (i=1; i<=n-w; i++) { j=i+w ; m[i,j]=0 ; for (k=i; k<j; k++) m[i,j]=min(m[i,j], m[i,k]+m[k+1,j]+p[i-1]*p[j]*p[k]); } %配列p[i]には次元 pi が格納されていると仮定.

More Related