์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค!
๊ทธ ๋์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋์ ๊ณํ๋ฒ ๊ด๋ จ๋ ๋ฌธ์ ๊ฐ ๋์ค๋ฉด ์ด๋ ค์์ ๊ฒช๊ณค ํ๋๋ฐ์..
์ค๋์ ๋์ ๊ณํ๋ฒ์ ๋ํด์ ์ ๋๋ก ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
๋ฐ๋ก ์์ํ ๊ฒ์!
๋์ ๊ณํ๋ฒ(Dynamic Programming)์ด๋?
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ 1950๋ ๋ ๋ฏธ๊ตญ์ ์ํ์์ธ ๋ฆฌ์ฒ๋ ๋ฒจ๋งจ์ด ์ต์ ํ ๋ฌธ์ (Optimization Problem)๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ๊ณ ์๋์๋ค. ๋ณต์กํ ๋ฌธ์ ๋ฅผ ๊ฐ๋จํ ์ฌ๋ฌ ๊ฐ์ ๋ฌธ์ ๋ก ๋๋์ด ํธ๋ ๋ฐฉ๋ฒ์ ๋งํ๋ฉฐ ์ด๊ฒ์ ๋ถ๋ถ ๋ฌธ์ ๋ฐ๋ณต๊ณผ ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ๋นํด ๋์ฑ ์ ์ ์๊ฐ ๋ด์ ํ ๋ ์ฌ์ฉํ๋ค. - ์ํค ๋ฐฑ๊ณผ -
์ฆ, ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฐ์ด ํฐ ๋ฌธ์ ๋ฅผ ์๊ฒ ์ชผ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ๋๊ฐ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ด ๋๊ธฐ ์ํ ์กฐ๊ฑด์ 3๊ฐ์ง๊ฐ ์์ต๋๋ค.
1. Simple subproblems
ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋๋ ์ ์์ด์ผ ํฉ๋๋ค.
2. Optimal substructure
์ต์ ์ ํด๋ฅผ ์ฐพ๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์์ด์ผ ํฉ๋๋ค.
3. Overlapping problems
์์ ๋ฌธ์ ๋ค์ด ์ค๋ณต๋์ด์ผ ํฉ๋๋ค.
์ด๋ ๊ฒ ์ธ ๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ์ ์ํ ์ ์์ต๋๋ค.
๋ถํ ์ ๋ณต(Divide and Conquer) ์๊ณ ๋ฆฌ์ฆ๊ณผ์ ์ฐจ์ด์
๊ทธ๋ ๋ค๋ฉด ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ฐจ์ด์ ์ ๋ฌด์์ผ๊น์?
๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ์ ์ํด ๋ถํ ๋ ์์ ๋ฌธ์ ๋ค์ ์๋ก ๋ ๋ฆฝ์ ์ ๋๋ค. ์ฆ ์๋ก ๊ด๊ณ๊ฐ ์๋ค๋ ๋ป์ด์ฃ .
ํ์ง๋ง ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ถํ ๋๋ ์์ ๋ฌธ์ ๋ค์ ์๋ก ๋ ๋ฆฝ์ ์ด์ง ์๊ณ ํ๋ฒ ํด๊ฒฐ๋ ๋ฌธ์ ๋ค์ ์๋ก ๊ณต์ ํฉ๋๋ค.
์ฝ๊ฒ ์๋ฅผ ๋ค์ด ์ค๋ช ํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๋จผ์ ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฅ ๋ํ์ ์ธ ํฉ๋ณ ์ ๋ ฌ์ ๊ณผ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์๋ก ๋ถํ ๋ ์ ๋ณด๋ ๋ค๋ฅธ ๊ณณ์ ์ฌ์ฉ๋์ง ์๊ณ , ์ฌ์ฉ๋ ๋๋ง๋ค ๊ณ์ฐ์ ํด์ค์ผ ํฉ๋๋ค.
๊ทธ ๋ค์์ผ๋ก ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ์ฅ ๋ํ์ ์ธ ํผ๋ณด๋์น ์์ด์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ถํ ๋๋๋ผ๋ ๋์ผํ ํจ์ ex) F(1)์ ๊ณต์ ํฉ๋๋ค.
์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด F(2)๋ฅผ ๊ตฌํ๊ธฐ ์ํด์ F(1)๊ณผ F(0)์ด ๊ณ์ฐ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ F(3)์ ๊ตฌํ๊ธฐ ์ํด์ F(2)์ F(1)์ด ๊ณ์ฐ๋์ด์ผ ํฉ๋๋ค.
์ฆ, ๋์ผํ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ๋ฒ ๊ตฌํด์ผ ํ๋ ๋ฌธ์ ์ ์ด ์๊ธฐ์ฃ ?
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ (Memoization) ๊ธฐ๋ฒ์ผ๋ก ํด๊ฒฐํฉ๋๋ค.
์ด๊ฒ ๋๋ฌธ์ ๋นํจ์จ์ ์ธ ๋ถํ ์ ๋ณต์ ๊ฐ์ ํ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค.
๋ฉ๋ชจ์ด์ ์ด์ (Memoization)
๋ฉ๋ชจ์ด์ ์ด์ (memoization)์ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ด ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณตํด์ผ ํ ๋, ์ด์ ์ ๊ณ์ฐํ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํจ์ผ๋ก์จ ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณต ์ํ์ ์ ๊ฑฐํ์ฌ ํ๋ก๊ทธ๋จ ์คํ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ ๊ธฐ์ ์ด๋ค. ๋์ ๊ณํ๋ฒ์ ํต์ฌ์ด ๋๋ ๊ธฐ์ ์ด๋ค. - ์ํค ๋ฐฑ๊ณผ -
์ฆ, ์์ ํด๊ฒฐ๋ ๋ฌธ์ ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด๋๊ณ ๋๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋ ๊บผ๋ด์ ์ฌ์ฉํ๋ ๊ฒ์ด์ฃ .
๋ค๋ฅธ ๋ง๋ก๋ ์บ์ฑ(Caching)์ด๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค.
Top Down vs Bottom up
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋๊ฐ๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
๋ฐ๋ก ๋ฐํ ์ ๋ฐฉ์๊ณผ ํ๋ค์ด ๋ฐฉ์์ด์ฃ .
Top Down
ํ๋ค์ด ๋ฐฉ์์ ๋ง ๊ทธ๋๋ก ์์์ ์๋๋ก(ํฐ ๋ฌธ์ ์์ ์์ ๋ฌธ์ ๋ก) ํด๊ฒฐํด ๋๊ฐ๋ ๋ฐฉ์์ ๋๋ค.
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด F(6)์ ํด๊ฒฐํ๊ธฐ ์ํด์ F(5)์ F(4)๋ฅผ ๊ตฌํ๊ณ F(5)๋ฅผ ๊ตฌํ๊ธฐ ์ํด F(4)์ F(3)์ ๊ตฌํ๊ณ ....
์ด๋ฐ ์์ผ๋ก ๊ฐ์ฅ ์์ ๋ฌธ์ F(0)๊ณผ F(1)์ด ๋ ๋๊น์ง ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋๋ค.
์ฌ๊ท๋ฅผ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์์ ํธ์ถํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด ๋์์ผ ํฉ๋๋ค.
์ฆ, ์์์ ์ธ๊ธํ๋ ๋ฉ๋ชจ์ด์ ์ด์ ๊ธฐ๋ฒ์ ํ๋ค์ด ๋ฐฉ์์ผ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
Bottom Up
๋ฐํ ์ ๋ฐฉ์์ ๋จ์ํ ๋ฐ๋ณต๋ฌธ์ ํตํด์ ๊ฐ์ฅ ์์ ๋ฌธ์ ์์ ํด๊ฒฐํด์ผ ํ๋ ๋ฌธ์ ์ ๋๋ฌํ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
์ฆ ํด๊ฒฐํด์ผ ํ๋ ๋ฌธ์ ๊ฐ F(6)์ด๋ผ๋ฉด 0๋ถํฐ 6๊น์ง ์ฐจ๋ก๋๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ๋๊ฐ๋ ๋ฐฉ์์ด์ฃ .
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ๊ณผ์
1. ์ต์ ํด๋ฅผ ๊ตฌํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ์ ์ํฉ๋๋ค.
2. ์ต์ ํด์ ๊ฐ์ ์ฌ๊ท์ ์ผ๋ก ์ ์ํฉ๋๋ค.
3. ์บ์ฑ์ ์ฌ์ฉํ๋ ํ๋ค์ด ๋ฐฉ์์ด๋ ๋ฐํ ์ ๋ฐฉ์์ผ๋ก ๊ฐ์ ๊ณ์ฐํฉ๋๋ค.
4. ๊ณ์ฐ๋ ๊ฐ์ผ๋ก ์ต์ ์ ํด๋ฅผ ๊ตฌํฉ๋๋ค.
์ฌ์ด ์ดํด๋ฅผ ์ํด ์๋ฅผ ๋ค์ด ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ ๊ณผ์ ์ ์ค๋ช ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๋์ ์์ง ๋ก๋ด(Coin collecting robot)
- ๋์ ์์ง ๋ก๋ด์ (1,1)์์ ์ถ๋ฐํ์ฌ ๊ธธ(Cell)์ ๋์ธ (6,5)๊น์ง ์ด๋ํ ์ ์์ต๋๋ค.
- ๋ก๋ด์ ์ค๋ฅธ์ชฝ์ด๋ ์๋๋ก๋ฐ์ ์ด๋ํ ์ ์์ต๋๋ค.
- ์ต๋ํ ๋ง์ ๋์ ์ ์์งํ๊ธฐ ์ํ ๊ฒฝ๋ก๋ฅผ ๊ตฌํฉ๋๋ค.
1. ์ต์ ํด๋ฅผ ๊ตฌํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ์ ์ํฉ๋๋ค.
๊ธธ(Cell)์ด ixj๋ก ๊ตฌ์ฑ๋์ด ์๋ค๋ฉด ์ต์ ํด๋ ๊ฐ์ฅ ๋ง์ง๋ง ๋ถ๋ถ์ธ F(i,j)๊ฐ ๋ฉ๋๋ค. ์ฆ(F(6,5)๊ฐ ๊ฐ์ฅ ์ต๋๊ฐ์ด ๋ฉ๋๋ค.
2. ์ต์ ํด์ ๊ฐ์ ์ฌ๊ท์ ์ผ๋ก ์ ์ํฉ๋๋ค.
์ค๋ฅธ์ชฝ์ผ๋ก ๋ด๋ ค๊ฐ์ ๋ ๋๋ ์๋๋ก ๋ด๋ ค๊ฐ์ ๋ ์ค์ ๋ ํฐ ๊ฐ์ ์ ํ๋ฉด ๋๊ฒ ์ฃ ?
์ฆ, ์๋ ์ ํ์์ ์ฌ๊ท ํธ์ถํฉ๋๋ค. (c๋ ๊ธธ(Cell)์ ์๋ฏธํฉ๋๋ค.)
F(i, j) = max{F(i-1, j), F(i, j-1)} + cij
3. ์บ์ฑ์ ์ฌ์ฉํ๋ ํ๋ค์ด ๋ฐฉ์์ด๋ ๋ฐํ ์ ๋ฐฉ์์ผ๋ก ๊ฐ์ ๊ณ์ฐํฉ๋๋ค.
2๋ฒ์์ ์ ์ํด๋์ ์ ํ์์ ์ฌ์ฉํ์ฌ ํ๋ค์ด ๋ฐฉ์์ผ๋ก ๊ฐ์ ๊ตฌํด๋๊ฐ๋ฉด ์๋์ ๊ฐ์ด ๊ฐ์ด ๊ณ์ฐ๋ฉ๋๋ค.
4. ๊ณ์ฐ๋ ๊ฐ์ผ๋ก ์ต์ ์ ํด๋ฅผ ๊ตฌํฉ๋๋ค.
๊ฐ์ฅ ๋ง์ง๋ง๋ฒ ์จฐ ๊ฐ์ธ (6,5)์ ๊ฐ์ด 5์ด๋ฏ๋ก ์ต์ ํด(์ต๋๊ฐ)์ 5๊ฐ ๋ฉ๋๋ค.
์ค๋์ ์ด๋ ๊ฒ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ๋ํด์ ์์๋ณด์์ต๋๋ค.
ํน์๋ผ๋ ํ๋ฆฐ ์ ์ด๋ ๊ถ๊ธํ์ ์ฌํญ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์!
'๐ฅ Computer Science > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] Floyd's Cycle Detection์ด๋? (feat. Linked List) (2) | 2022.09.18 |
---|---|
[Algorithm] ์์์ ๊ด๋ จ๋ ์๊ณ ๋ฆฌ์ฆ(feat. ์๋ผํ ์ค ํ ๋ค์ค์ ์ฒด) (0) | 2022.01.19 |
[Algorithm] ํต ์ ๋ ฌ(Quick Sort)๋? (feat. Swift) (0) | 2021.10.25 |
[Algorithm] ํ ์ ๋ ฌ(HeapSort)์ด๋? (feat.Swift) (0) | 2021.10.19 |
[Algorithm] ํฉ๋ณ ์ ๋ ฌ(Merge Sort)๋? (feat. Swift) (0) | 2021.10.14 |
๋๊ธ