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
540
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
Other Decks in Programming
See All in Programming
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
190
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
150
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
200
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
760
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
260
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
0
190
Claude Team Plan導入・ガイド
tk3fftk
0
200
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
230
【やさしく解説 設計編 #1】「ドメイン駆動」と「実装駆動」ってなに? 〜設計の考え方を、たとえ話で学ぼう〜
panda728
PRO
1
120
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
180
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
320
Featured
See All Featured
[SF Ruby Conf 2025] Rails X
palkan
2
1.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
180
Building Adaptive Systems
keathley
44
3.1k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
Mobile First: as difficult as doing things right
swwweet
225
10k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Bash Introduction
62gerente
615
220k
How to make the Groovebox
asonas
2
2.3k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
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