๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/DP

[๋ฐฑ์ค€] 12865๋ฒˆ: ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ

by syLim___ 2023. 1. 17.
728x90

 

์ด ๋ฌธ์ œ๋Š” ์œ ๋ช…ํ•œ ๋ฐฐ๋‚ญ ๋ฌธ์ œ(Knapsack Problem)์ด๋‹ค.

  • ๋ฐฐ๋‚ญ์— ์ง์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฌด๊ฒŒ(k)๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์Œ
  • ์ง๋“ค์€ ๋ชจ๋‘ ๊ฐ๊ฐ์˜ ๋ฌด๊ฒŒ(w)์™€ ๊ฐ€์น˜(v)๋ฅผ ๊ฐ–๊ณ  ์žˆ์Œ
  • ๊ฐ€์น˜ํ•ฉ์ด ์ตœ๋Œ€๊ฐ€ ๋˜๋„๋ก ์ง๋“ค์„ ์–ด๋–ป๊ฒŒ ๋‹ด์„์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฌธ์ œ
  • ์กฐํ•ฉ ์ตœ์ ํ™” ๋ฌธ์ œ

๋ฐฐ๋‚ญ ๋ฌธ์ œ๋Š” ์ง์„ ์ชผ๊ฐค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ(์ง์˜ ๋ฌด๊ฒŒ๊ฐ€ ์†Œ์ˆ˜)์™€ ์ชผ๊ฐค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ(์ง์˜ ๋ฌด๊ฒŒ๊ฐ€ ์–‘์˜ ์ •์ˆ˜)๋กœ ๋‚˜๋‰œ๋‹ค.

  • ๋ถ„ํ• ๊ฐ€๋Šฅ ๋ฐฐ๋‚ญ๋ฌธ์ œ(Fractional Knapsack problem): ์ง์„ ์ชผ๊ฐค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ. ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ‘ผ๋‹ค
  • 0-1 Knapsack problem: ์ง์„ ์ชผ๊ฐค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ. ๋™์ ๊ณ„ํš๋ฒ•(DP)์œผ๋กœ ํ‘ผ๋‹ค

 

์ด ๋ฌธ์ œ๋Š” ์ง์„ ์ชผ๊ฐค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์ด๋ฏ€๋กœ DP๋กœ ํ’€์–ด์•ผํ•œ๋‹ค



๋จผ์ € ๊ฐ ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ์™€ ๊ฐ€์น˜๋ฅผ ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค

 

w[5]

0 1 2 3 4
0 6 4 3 5

v[5]

0 1 2 3 4
0 13 8 6 12

 

DP[n+1][k+1]  (n: ๋ฌผ๊ฑด ๋ฒˆํ˜ธ, k: ๋ฐฐ๋‚ญ์˜ ์ตœ๋Œ€ ๋ฌด๊ฒŒ)

n \ k 1 2 3 4 5 6 7
0 0 0 0 0 0 0 0
1              
2              
3              
4              

 

0) 0๋ฒˆ์งธ ํ–‰์€ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์ค€๋‹ค

 


 

n \ k 1 2 3 4 5 6 7
0 0 0 0 0 0 0 0
1 0 0 0 0 0 13 13
2              
3              
4              

 

1) ์ฒซ๋ฒˆ์งธ ๋ฌผ๊ฑด (n=1)

 k=1~5

 -๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ๊ฐ€ ๊ฐ€๋ฐฉ์˜ ์ตœ๋Œ€ ์šฉ๋Ÿ‰๋ณด๋‹ค ํฌ๋ฏ€๋กœ ๋ฌผ๊ฑด์„ ๋‹ด์„ ์ˆ˜ ์—†๋‹ค.

 -๋ฌผ๊ฑด์„ ๋‹ด์ง€ ์•Š์•˜์„ ๋•Œ์˜ ๊ฐ€์น˜(DP[0][1] ~ DP[0][5])๋ฅผ ๊ทธ๋Œ€๋กœ ์ ์–ด์ค€๋‹ค.

 k=6,7

 -๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ <= ๊ฐ€๋ฐฉ์˜ ์ตœ๋Œ€ ์šฉ๋Ÿ‰์ด๋ฏ€๋กœ ๋ฌผ๊ฑด์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

 -๋ฌผ๊ฑด์„ ๋‹ด์•˜์„ ๋•Œ์˜ ๊ฐ€์น˜๋Š” 13, ๋ฌผ๊ฑด์„ ๋‹ด์ง€ ์•Š์•˜์„ ๋•Œ์˜ ๊ฐ€์น˜๋Š” 0์ด๋‹ค. 

 -๋‘˜ ์ค‘ ํฐ ๊ฐ’์„ ์ ์–ด์ค€๋‹ค

 


 

n \ k 1 2 3 4 5 6 7
0 0 0 0 0 0 0 0
1 0 0 0 0 0 13 13
2 0 0 0 8 8 13 13
3              
4              

 

2) ๋‘ ๋ฒˆ์งธ ๋ฌผ๊ฑด (n=2)

k=1~3

 -๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ๊ฐ€ ๊ฐ€๋ฐฉ์˜ ์ตœ๋Œ€ ์šฉ๋Ÿ‰๋ณด๋‹ค ํฌ๋ฏ€๋กœ ๋ฌผ๊ฑด์„ ๋‹ด์„ ์ˆ˜ ์—†๋‹ค.

 -๋ฌผ๊ฑด์„ ๋‹ด์ง€ ์•Š์•˜์„ ๋•Œ์˜ ๊ฐ€์น˜(DP[1][1] ~ DP[1][3])๋ฅผ ๊ทธ๋Œ€๋กœ ์ ์–ด์ค€๋‹ค.

k=4

 -๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ <= ๊ฐ€๋ฐฉ์˜ ์ตœ๋Œ€ ์šฉ๋Ÿ‰. ๋ฌผ๊ฑด์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

 -๋ฌผ๊ฑด์„ ๋‹ด์•˜์„ ๋•Œ์˜ ๊ฐ€์น˜๋Š” 8, ๋ฌผ๊ฑด์„ ๋‹ด์ง€ ์•Š์•˜์„ ๋•Œ์˜ ๊ฐ€์น˜๋Š” DP[1][4]=0์ด๋‹ค. 

 -๋‘˜ ์ค‘ ํฐ ๊ฐ’์„ ์ ์–ด์ค€๋‹ค

k=5

 -๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ <= ๊ฐ€๋ฐฉ์˜ ์ตœ๋Œ€ ์šฉ๋Ÿ‰. ๋ฌผ๊ฑด์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

 -๋ฌผ๊ฑด์„ ๊ฐ€๋ฐฉ์— ๋„ฃ์œผ๋ฉด, ๊ฐ€๋ฐฉ์˜ ์ตœ๋Œ€ ์šฉ๋Ÿ‰์ด 1์ด ๋‚จ๋Š”๋‹ค.

 -์ด๋ ‡๊ฒŒ ๋ฌผ๊ฑด์„ ๋„ฃ๊ณ ๋„ ๊ฐ€๋ฐฉ ์šฉ๋Ÿ‰์ด ๋‚จ์„ ๋•Œ์—๋Š”, ํ˜„์žฌ ๋ฌผ๊ฑด์„ ๋‹ด๊ธฐ ์ „ ์ƒํ™ฉ์—์„œ ๊ฐ€๋ฐฉ์˜ ์ตœ๋Œ€ ์šฉ๋Ÿ‰์ด 1์ผ ๊ฒฝ์šฐ์˜ ๊ฐ€์น˜๋„ ๋”ํ•ด์ค˜์•ผ ํ•œ๋‹ค!! ์ด ๊ฐ’์€ ์•ž์—์„œ ๊ตฌํ–ˆ๋‹ค (DP[1][1])

 -๋”ฐ๋ผ์„œ ๋ฌผ๊ฑด์„ ๊ฐ€๋ฐฉ์— ๋‹ด๋Š” ๊ฒฝ์šฐ์˜ ๊ฐ€์น˜๋Š” 8 + DP[1][1] = 8, ๋ฌผ๊ฑด์„ ๋‹ด์ง€ ์•Š์•˜์„ ๋•Œ์˜ ๊ฐ€์น˜๋Š” DP[1][5]=0

 -๋‘˜ ์ค‘ ํฐ ๊ฐ’์„ ์ ์–ด์ค€๋‹ค

k=6

 -๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ <= ๊ฐ€๋ฐฉ์˜ ์ตœ๋Œ€ ์šฉ๋Ÿ‰. ๋ฌผ๊ฑด์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

 -๋ฌผ๊ฑด์„ ๊ฐ€๋ฐฉ์— ๋„ฃ์œผ๋ฉด, ๊ฐ€๋ฐฉ์˜ ์ตœ๋Œ€ ์šฉ๋Ÿ‰์ด 2 ๋‚จ์œผ๋ฏ€๋กœ ๊ฐ€์น˜ ๊ณ„์‚ฐํ•  ๋•Œ DP[1][2]๋ฅผ ๋”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค

 -๋ฌผ๊ฑด์„ ๊ฐ€๋ฐฉ์— ๋‹ด๋Š” ๊ฒฝ์šฐ์˜ ๊ฐ€์น˜๋Š” 8+DP[1][2]=8, ๋‹ด์ง€ ์•Š์•˜์„ ๋•Œ์˜ ๊ฐ€์น˜๋Š” DP[1][6]=13

 -๋‘˜ ์ค‘ ํฐ ๊ฐ’์„ ์ ์–ด์ค€๋‹ค

k=7

 -๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ <= ๊ฐ€๋ฐฉ์˜ ์ตœ๋Œ€ ์šฉ๋Ÿ‰. ๋ฌผ๊ฑด์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

 -๋ฌผ๊ฑด์„ ๋‹ด๋Š” ๊ฒฝ์šฐ์˜ ๊ฐ€์น˜: 8 + DP[1][3] = 8, ๋‹ด์ง€ ์•Š์•˜์„ ๋•Œ์˜ ๊ฐ€์น˜๋Š” DP[1][7]=13

 -๋‘˜ ์ค‘ ํฐ ๊ฐ’์„ ์ ์–ด์ค€๋‹ค.

 


 

์ •๋ฆฌํ•˜๋ฉด,

 

 (1) w[n] > k ์ธ ๊ฒฝ์šฐ, DP[n][k] = DP[n-1][k]

 (2) w[n]<=k์ธ ๊ฒฝ์šฐ, DP[n][k] = max( DP[n-1][k-w[n]] + v[n] , DP[n-1][k] )

 


 

์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฐ์—ด์„ ๋ชจ๋‘ ์ฑ„์›Œ์ค€๋‹ค

n \ k 1 2 3 4 5 6 7
0 0 0 0 0 0 0 0
1 0 0 0 0 0 13 13
2 0 0 0 8 8 13 13
3 0 0 6 8 8 13 14
4 0 0 6 8 12 13 14

 

์ด ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด ์ •๋‹ต

 


728x90