์ค์ํ ์๊ณ ๋ฆฌ์ฆ ์ธ ๊ฐ์ง์ค ํ๋์ธ Dynamic Program ์ ์ ๋ช ํ ์์ ์ธ ๋ฐฑ์ค 12865๋ฒ ๋ฐฐ๋ญ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ค.
Knapsack problem์ ์ฃผ์ด์ง ๋ฌด๊ฒ ์ ํ ์์์ ๊ฐ ์์ดํ ๋ค์ ๋ฌด๊ฒ์ ๊ฐ์น๋ฅผ ์กฐํฉํ์ฌ ์ ์๋ ์ต๋ ๊ฐ์น๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
ํด๋น ๋ฌธ์ ๋ฅผ Dynamic Program์ผ๋ก ์ ๊ทผํ๋๋ฐ์๋ ์ด์ ๊ฐ ์๋ค.
์ฐ์ ๋จ์ ์ ๊ทผ๋ฒ์ผ๋ก ํด๋น ๋ฌธ์ ๋ฅผ ํผ๋ค๋ฉด item ํ๋๋น ์ ํ ๋๋ ๋น์ ํ์ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ฅด๊ฒ ๋๋ฏ๋ก ์ด 2^n ์ด๋ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
Greedy Algorithm ์ผ๋ก ํด๋น ๋ฌธ์ ๋ฅผ ์ ๊ทผํ๋ค๋ฉด ์ด๋ค๊ฒ์ greedy ์ ๋ต์ผ๋ก ์ ํํด์ผํ ์ง ๊ณจ๋ผ์ผ ํ๋๋ฐ
value ๊ฐ์ด ํฐ ๊ฒ๋ถํฐ ์ ํํ๊ฒ ๋๋ค๋ฉด optimalํ solution์ ๊ฐ์ง์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค.
๊ทธ๋ ๋ค๊ณ ๋ฌด๊ฒ๊ฐ ์ ์ ๊ฒ ๋ถํฐ ์ ํํ๊ฒ ๋๋ค๊ณ optimalํ solution์ ๊ฐ์ง๊ฒ ๋๋ค๊ณ ํ์ ํ ์ ์๋ค.
๋ฐ๋ผ์ ํด๋น ๋ฌธ์ ๋ DP๋ฅผ ์ด์ฉํ์ฌ ์ ๊ทผํ๋ ๊ฒ์ด ๋ง๋ ๊ฒ์ด๋ค.
์๋์ ๊ฐ์ด DP๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ๋์๋ ๋จผ์ optimal solution์ case๋ฅผ ๋๋์ด ์ค๊ณํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๊ทธ ๋ค์์ผ๋ก๋ recursive step์ ๊ฑฐ์ณ DPํ ์ด๋ธ์ ์ฑ์ ๊ฐ์ ์ฐพ์ผ๋ฉด ๋๋ค.
Knapsack problem์ ํฌ๊ฒ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ก ๋๋ ์ ์๋ค.
Case 1 : item i๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ
Case 2 : item i๋ฅผ ์ ํํ์ง ์๋ ๊ฒฝ์ฐ
์ด๊ฒ์ Recursive step์ผ๋ก ํํํ๋ค๋ฉด
1. item i์ ๋ฌด๊ฒ๊ฐ ๋ ์ด์ ๊ฐ๋ฐฉ์ ๋ค์ด๊ฐ ์ ์๋ ๊ฒฝ์ฐ : (i ๊ฐ ์๋ช ํ๊ฒ ๋ค์ด๊ฐ์ง ์์ผ๋ฏ๋ก ๊ทธ ์ ๊น์ง ๋น๊ตํ ๊ฒ๊ณผ ๋์ผ)
OPT(i,w) = OPT(i-1, w)
2. item i์ ๋ฌด๊ฒ๊ฐ ๊ฐ๋ฐฉ์ ๋ค์ด๊ฐ ์ ์๋ ๊ฒฝ์ฐ :
OPT(i,w) = max ( OPT(i-1, w) , v(i) + OPT(i-1, w-w(i)) )
-> i ๊ฐ ๋ค์ด๊ฐ์ ๋์ ๋ค์ด๊ฐ์ง ์์์๋์ OPT๊ฐ์ ๋น๊ตํ์ฌ ํฐ ๊ฒ์ ์ ํํ์ฌ ํ ์ด๋ธ์ ์ ๋๋ค.
์์์ ๋งํ ๊ณผ์ ์ ๋ฐ๋ผํ๋ฉด ์๋ ์ฌ์ง๊ณผ ๊ฐ์ด ํ ์ด๋ธ์ด ์ฑ์์ง๊ณ ๋ง์ง๋ง๊ฐ์ผ๋ก ์ต๋ ๊ฐ์น๋ฅผ ๊ตฌํ ์ ์๊ฒ ๋๋ค.
๋ง์ง๋ง์ผ๋ก ํด๋น๋ฌธ์ ๋ฅผ Java์ฝ๋๋ก ํผ ๊ฒ์ผ๋ก ํฌ์คํ ์ ๋ง์น๋ค.
'์๊ณ ๋ฆฌ์ฆ > ์๊ณ ๋ฆฌ์ฆ ์ด๋ก ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ (Divide and Conquer) (0) | 2024.08.02 |
---|---|
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ (Greedy Algorithm) (4) | 2024.07.20 |
ํฌ ํฌ์ธํฐ - ์๊ณ ๋ฆฌ์ฆ (2) | 2024.07.20 |
์ด์ง ํ์ - ์๊ณ ๋ฆฌ์ฆ (0) | 2024.07.20 |
์ ๋ ฌ (Sort) - ์๊ณ ๋ฆฌ์ฆ (0) | 2024.06.25 |