Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DPを使ったナップザック問題の解き方/Solve knapsack problem with DP
Search
d kura
November 29, 2022
Programming
0
400
DPを使ったナップザック問題の解き方/Solve knapsack problem with DP
d kura
November 29, 2022
Tweet
Share
Other Decks in Programming
See All in Programming
小さな開発会社を作った理由
polidog
0
1.9k
CSC307 Lecture 14
javiergs
PRO
0
220
AHC035解説
terryu16
0
710
CSC307 Lecture 12
javiergs
PRO
0
220
CSC307 Lecture 09
javiergs
PRO
1
500
Play Billing Library 7.0.0 変更点まとめ@potatotips#88
kako351
0
160
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
2
81k
Cloudflare Workers x AWS Lambdaの組み合わせユースケース / Cloudflare Workers x AWS Lambda Combination Use Case
seike460
PRO
2
310
継続的な活動で築く地方エンジニアの道
myamashii
2
350
なぜ宣言的 UI は壊れにくいのか / Why declarative UI is less fragile
uenitty
29
13k
大規模マルチテナントを解決するYugabyteDBという選択肢
nnaka2992
1
250
さきがけから振り返るアーキテクチャ刷新 / Reflecting on the Architectural Renewal from the Vanguard
nrslib
2
770
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
399
65k
From Idea to $5000 a Month in 5 Months
shpigford
377
46k
BBQ
matthewcrist
82
9k
Faster Mobile Websites
deanohume
303
30k
What's in a price? How to price your products and services
michaelherold
239
11k
Done Done
chrislema
179
15k
Designing for humans not robots
tammielis
247
25k
Stop Working from a Prison Cell
hatefulcrawdad
266
20k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
17
1.5k
Building Your Own Lightsaber
phodgson
101
5.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
228
16k
4 Signs Your Business is Dying
shpigford
178
21k
Transcript
DP(動的計画法)を使った ナップザック問題の解き方 情報科学科 1年 倉持大樹 1
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 3 0 1
2 3 表の右下の数字は 3番目までで重さが3以下の価値の最大値 8
DPの考え方(ナップザック問題) 𝑥𝑖,𝑤 = i番目までで重さがw以下の価値の最大値 i\w 0 1 2 3 0
1 2 3 1. i=0の行を埋める⇒一つも候補がない 9
DPの考え方(ナップザック問題) 𝑥𝑖,𝑤 = i番目までで重さがw以下の価値の最大値 i\w 0 1 2 3 0
0 0 0 0 1 2 3 1. i=0の行を埋める⇒一つも候補がない 10
DPの考え方(ナップザック問題) 𝑥𝑖,𝑤 = i番目までで重さがw以下の価値の最大値 i\w 0 1 2 3 0
0 0 0 0 1 2 3 2. 1番目の品物(2,3)を選ぶが決め、i=1の行を埋める マスに入る数の候補は (ⅰ) 一つ上の行にある数 (1番目を選ばない) (ⅱ) 一つ上の行のw-2列にある数+3 (1番目を選ぶ) ※w-2列が存在しないときは(ⅰ)のみ 11
DPの考え方(ナップザック問題) 𝑥𝑖,𝑤 = i番目までで重さがw以下の価値の最大値 i\w 0 1 2 3 0
0 0 0 0 1 2 3 2. 1番目の品物(2,3)を選ぶが決め、i=1の行を埋める (ⅰ) 一つ上の行にある数 (1番目を選ばない) (ⅱ) 一つ上の行のw-2列にある数+3 (1番目を選ぶ) 12
DPの考え方(ナップザック問題) 𝑥𝑖,𝑤 = i番目までで重さがw以下の価値の最大値 i\w 0 1 2 3 0
0 0 0 0 1 0 0 2 3 2. 1番目の品物(2,3)を選ぶが決め、i=1の行を埋める (ⅰ) 一つ上の行にある数 (1番目を選ばない) (ⅱ) 一つ上の行のw-2列にある数+3 (1番目を選ぶ) 13
DPの考え方(ナップザック問題) 𝑥𝑖,𝑤 = i番目までで重さがw以下の価値の最大値 i\w 0 1 2 3 0
0 0 0 0 1 0 0 2 3 2. 1番目の品物(2,3)を選ぶが決め、i=1の行を埋める (ⅰ) 一つ上の行にある数 (1番目を選ばない) (ⅱ) 一つ上の行のw-2列にある数+3 (1番目を選ぶ) 14
DPの考え方(ナップザック問題) 𝑥𝑖,𝑤 = i番目までで重さがw以下の価値の最大値 i\w 0 1 2 3 0
0 0 0 0 1 0 0 3 3 2 3 2. 1番目の品物(2,3)を選ぶが決め、i=1の行を埋める (ⅰ) 一つ上の行にある数 (1番目を選ばない) (ⅱ) 一つ上の行のw-2列にある数+3 (1番目を選ぶ) 15
DPの考え方(ナップザック問題) 𝑥𝑖,𝑤 = i番目までで重さがw以下の価値の最大値 i\w 0 1 2 3 0
0 0 0 0 1 0 0 3 3 2 3 3. 2番目の品物(1,4)を選ぶが決め、i=2の行を埋める 16
DPの考え方(ナップザック問題) 𝑥𝑖,𝑤 = i番目までで重さがw以下の価値の最大値 i\w 0 1 2 3 0
0 0 0 0 1 0 0 3 3 2 0 4 4 7 3 3. 2番目の品物(1,4)を選ぶが決め、i=2の行を埋める 17
DPの考え方(ナップザック問題) 𝑥𝑖,𝑤 = i番目までで重さがw以下の価値の最大値 i\w 0 1 2 3 0
0 0 0 0 1 0 0 3 3 2 0 4 4 7 3 4. 3番目の品物(3,6)を選ぶが決め、i=3の行を埋める 18
DPの考え方(ナップザック問題) 𝑥𝑖,𝑤 = i番目までで重さがw以下の価値の最大値 i\w 0 1 2 3 0
0 0 0 0 1 0 0 3 3 2 0 4 4 7 3 0 4 4 7 4. 3番目の品物(3,6)を選ぶが決め、i=3の行を埋める 19
DPの考え方(ナップザック問題) 𝑥𝑖,𝑤 = i番目までで重さがw以下の価値の最大値 i\w 0 1 2 3 0
0 0 0 0 1 0 0 3 3 2 0 4 4 7 3 0 4 4 7 5. 表の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 3 0 0 0 0 0 1 24
最後に • 𝑂(2𝑁) → 𝑂(𝑁𝑊)まで短縮できた • このほかの2つDPを使う問題のパターンに 取り組みたい • ナップザック問題をより発展させた問題に
取り組みたい 25