DP(動的計画法)を使ったナップザック問題の解き方情報科学科 1年倉持大樹1
View Slide
DP(動的計画法)とは?• 数学の漸化式のように解くアルゴリズム• 全探索で行うと時間がかかりすぎる問題に使う2
DPの実践(ナップザック問題)問題N個の品物があり、各品物に重さと価値が決まっている。これらの品物からいくつかを重さの総和がWを超えないように選んだときの、価値の総和の最大値を求めよ。例N=3(重さ,価値)=(2,3),(1,4),(3,6)W=3⇒7 ( (2,3),(1,4)を選んだとき )3
他の解法(ナップザック問題)各品物について選ぶ、選ばないを決める→全パターンの重さ、価値の合計を出す→重さがW以下の中での価値の最大値を見つける品物 (2,3) (1,4) (3,6) 重さ 価値〇 〇 〇 6 13〇 〇 × 3 7〇 × 〇 5 9〇 × × 2 3× 〇 〇 4 10× 〇 × 1 4× × 〇 3 6× × × 0 0 4
DPの考え方(ナップザック問題)考える範囲⇒一度に全体を考えるとわかりずらい5
DPの考え方(ナップザック問題)𝑥𝑖=i番目まででの価値の最大値考える範囲⇒考える範囲を増やしていく6
DPの考え方(ナップザック問題)→重さの情報がないため 𝑥𝑖を 𝑥𝑖−1から求められない⇒・添え字の数を2つに増やす・増やした添え字に重さの情報を入れる𝑥𝑖=i番目まででの価値の最大値𝑥𝑖,𝑤=i番目までで重さがw以下の価値の最大値7
DPの考え方(ナップザック問題)𝑥𝑖,𝑤=i番目までで重さがw以下の価値の最大値i\w 0 1 2 30123表の右下の数字は3番目までで重さが3以下の価値の最大値8
DPの考え方(ナップザック問題)𝑥𝑖,𝑤= i番目までで重さがw以下の価値の最大値i\w 0 1 2 301231. i=0の行を埋める⇒一つも候補がない9
DPの考え方(ナップザック問題)𝑥𝑖,𝑤= i番目までで重さがw以下の価値の最大値i\w 0 1 2 30 0 0 0 01231. i=0の行を埋める⇒一つも候補がない10
DPの考え方(ナップザック問題)𝑥𝑖,𝑤= i番目までで重さがw以下の価値の最大値i\w 0 1 2 30 0 0 0 01232. 1番目の品物(2,3)を選ぶが決め、i=1の行を埋めるマスに入る数の候補は(ⅰ) 一つ上の行にある数 (1番目を選ばない)(ⅱ) 一つ上の行のw-2列にある数+3 (1番目を選ぶ)※w-2列が存在しないときは(ⅰ)のみ11
DPの考え方(ナップザック問題)𝑥𝑖,𝑤= i番目までで重さがw以下の価値の最大値i\w 0 1 2 30 0 0 0 01232. 1番目の品物(2,3)を選ぶが決め、i=1の行を埋める(ⅰ) 一つ上の行にある数 (1番目を選ばない)(ⅱ) 一つ上の行のw-2列にある数+3 (1番目を選ぶ)12
DPの考え方(ナップザック問題)𝑥𝑖,𝑤= i番目までで重さがw以下の価値の最大値i\w 0 1 2 30 0 0 0 01 0 0232. 1番目の品物(2,3)を選ぶが決め、i=1の行を埋める(ⅰ) 一つ上の行にある数 (1番目を選ばない)(ⅱ) 一つ上の行のw-2列にある数+3 (1番目を選ぶ)13
DPの考え方(ナップザック問題)𝑥𝑖,𝑤= i番目までで重さがw以下の価値の最大値i\w 0 1 2 30 0 0 0 01 0 0232. 1番目の品物(2,3)を選ぶが決め、i=1の行を埋める(ⅰ) 一つ上の行にある数 (1番目を選ばない)(ⅱ) 一つ上の行のw-2列にある数+3 (1番目を選ぶ)14
DPの考え方(ナップザック問題)𝑥𝑖,𝑤= i番目までで重さがw以下の価値の最大値i\w 0 1 2 30 0 0 0 01 0 0 3 3232. 1番目の品物(2,3)を選ぶが決め、i=1の行を埋める(ⅰ) 一つ上の行にある数 (1番目を選ばない)(ⅱ) 一つ上の行のw-2列にある数+3 (1番目を選ぶ)15
DPの考え方(ナップザック問題)𝑥𝑖,𝑤= i番目までで重さがw以下の価値の最大値i\w 0 1 2 30 0 0 0 01 0 0 3 3233. 2番目の品物(1,4)を選ぶが決め、i=2の行を埋める16
DPの考え方(ナップザック問題)𝑥𝑖,𝑤= i番目までで重さがw以下の価値の最大値i\w 0 1 2 30 0 0 0 01 0 0 3 32 0 4 4 733. 2番目の品物(1,4)を選ぶが決め、i=2の行を埋める17
DPの考え方(ナップザック問題)𝑥𝑖,𝑤= i番目までで重さがw以下の価値の最大値i\w 0 1 2 30 0 0 0 01 0 0 3 32 0 4 4 734. 3番目の品物(3,6)を選ぶが決め、i=3の行を埋める18
DPの考え方(ナップザック問題)𝑥𝑖,𝑤= i番目までで重さがw以下の価値の最大値i\w 0 1 2 30 0 0 0 01 0 0 3 32 0 4 4 73 0 4 4 74. 3番目の品物(3,6)を選ぶが決め、i=3の行を埋める19
DPの考え方(ナップザック問題)𝑥𝑖,𝑤= i番目までで重さがw以下の価値の最大値i\w 0 1 2 30 0 0 0 01 0 0 3 32 0 4 4 73 0 4 4 75. 表の1番右下のマスの値が答え20
DPの実践(ナップザック問題)1. 漸化式の添え字の数を決める2. 漸化式を決定する3. 初期値を決定する解法の手順21
DPの実践(ナップザック問題)⇒添え字は i と w の2つi…何番目の品物まで考えるかw…重さはいくつ以下とするか1. 漸化式の添え字の数を決める22
DPの実践(ナップザック問題)i番目の品物の重さ・価値 ⇒ 𝑤𝑖・𝑣𝑖とすると𝑥𝑖,𝑤= ൝max(𝑥𝑖−1,𝑤−𝑤𝑖+𝑣𝑖, 𝑥𝑖−1,𝑤)𝑥𝑖−1,𝑤𝑤 ≥ 𝑤𝑖𝑤 < 𝑤𝑖(ⅰ) 一つ上の行にある数 (i番目を選ばない)(ⅱ) 一つ上の行のw-𝑤𝑖列にある数+𝑣𝑖(i番目を選ぶ)2. 漸化式の決定漸化式23
DPの実践(ナップザック問題)3. 初期値の決定𝑥𝑖,𝑤= 0 0 ≤ 𝑤 ≤ 𝑊⇒表のi=0の行をすべて0で埋めたi\w 0 1 2 30 0 0 0 0124
最後に• 𝑂(2𝑁) → 𝑂(𝑁𝑊)まで短縮できた• このほかの2つDPを使う問題のパターンに取り組みたい• ナップザック問題をより発展させた問題に取り組みたい25