Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
DPを使ったナップザック問題の解き方/Solve knapsack problem with DP
Search
d kura
November 29, 2022
Programming
600
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DPを使ったナップザック問題の解き方/Solve knapsack problem with DP
d kura
November 29, 2022
Transcript
25 slides
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
Other Decks in Programming
See All in Programming
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
660
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
370
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
1.7k
ビジネスロジックを堅牢に~Scala 3のドメインプリミティブ~
j5ik2o
0
120
Spec-driven Development with AI
simas
PRO
0
2.3k
小さなアプリを作って公開するまで
onozaty
0
170
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
170
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
200
複数ドメインを一つのアプリに統合するFlutterの設計と運用_FlutterKaigi2026登壇資料(須永高弘)
takahirosunaga
0
180
LLM 101: Exploring LLMs, Starting with Tokens.
dalinaum
0
100
SODA - FACT BOOK(EN)
sodainc
1
230
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
750
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
340
We Have a Design System, Now What?
morganepeng
55
8.4k
Designing for humans not robots
tammielis
254
26k
So, you think you're a good person
axbom
PRO
2
2.3k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
Into the Great Unknown - MozCon
thekraken
41
2.8k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
460
Chasing Engaging Ingredients in Design
codingconduct
0
390
Why Our Code Smells
bkeepers
PRO
340
58k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
380
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k