$30 off During Our Annual Pro Sale. View Details »
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
510
DPを使ったナップザック問題の解き方/Solve knapsack problem with DP
d kura
November 29, 2022
Tweet
Share
Other Decks in Programming
See All in Programming
著者と進める!『AIと個人開発したくなったらまずCursorで要件定義だ!』
yasunacoffee
0
120
生成AIを利用するだけでなく、投資できる組織へ
pospome
0
220
関数実行の裏側では何が起きているのか?
minop1205
1
680
JETLS.jl ─ A New Language Server for Julia
abap34
1
110
tparseでgo testの出力を見やすくする
utgwkk
1
180
認証・認可の基本を学ぼう前編
kouyuume
0
190
TypeScript 5.9 で使えるようになった import defer でパフォーマンス最適化を実現する
bicstone
1
1.2k
MAP, Jigsaw, Code Golf 振り返り会 by 関東Kaggler会|Jigsaw 15th Solution
hasibirok0
0
230
全員アーキテクトで挑む、 巨大で高密度なドメインの紐解き方
agatan
8
20k
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
110
20 years of Symfony, what's next?
fabpot
2
340
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
380
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
700
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Rails Girls Zürich Keynote
gr2m
95
14k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Documentation Writing (for coders)
carmenintech
76
5.2k
Become a Pro
speakerdeck
PRO
31
5.7k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
For a Future-Friendly Web
brad_frost
180
10k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
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