์๊ณ ๋ฆฌ์ฆ์ด๋?
- ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์์๋๋ก ๋ช ํํ๊ฒ ๊ธฐ์ ํ ๊ฒ
- ์ด๋ ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ ํด์ง ์ผ๋ จ์ ์ ์ฐจ๋ ๋ฐฉ๋ฒ์ ๊ณต์ํํ ํํ๋ก ํํํ ๊ฒ
- ๋ฌธ์ ํด๊ฒฐ์ ํ์ํ ๊ณ์ฐ ์ ์ฐจ ๋๋ ์ฒ๋ฆฌ ๊ณผ์ ์ ์์
- ์ ํ๋ ์๊ฐ๊ณผ ๊ณต๊ฐ ์์์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ์ง ์ ์ํ ๋ก์ง
- ์๊ณ ๋ฆฌ์ฆ์ ํตํด ํน์ ํ ์ ๋ ฅ์ ๋ฐ์์ ์คํํ ๊ฒฐ๊ณผ์ธ ํด๋ฅผ ์ถ๋ ฅ
1. ๋ถํ ์ ๋ณต(Divide and Conquer)
1.1 ์ ์
์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ๊ฐ์ ์ ํ์ ๋ ์์ ๋ถ๋ถ ๋ฌธ์ ๋ค๋ก ๋ ์ด์ ๋๋ ์ ์์ ๋๊น์ง ๋๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ ๋ถ๋ถ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ ํ, ๋ค์ ํฉ๋ณํ์ฌ ๋ฌธ์ ์ ๋ต์ ์ป๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
1.2 ์ ๋ต
โ ๋ถํ (Divide) : ๋ฌธ์ ๋ฅผ ๋์ผํ ์ ํ์ ์ฌ๋ฌ ํ์ ๋ฌธ์ ๋ก ๋๋๋ค.
โก ์ ๋ณต(Conquer) : ๊ฐ์ฅ ์์ ๋จ์์ ํ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. ๋ณดํต ์ฌ๊ท์ ๋ฐฉ๋ฒ์ผ๋ก ํด๋ฅผ ๊ตฌํ๋ค.
โข ํฉ๋ณ(Merge) : ํ์ ๋ฌธ์ ๋ค์ ํด๋ฅผ ํฉ์ณ ์๋ ๋ฌธ์ ์ ํด๋ฅผ ๊ตฌํ๋ค.
1.3 ์ ์ฉ
์ด์ง ํ์(Binary search)
ํฉ๋ณ ์ ๋ ฌ(Merge sort)
ํต ์ ๋ ฌ(Quick sort)
์ ํ(Selection)
2. ์์ฌ์์ด(Greedy)
2.1 ์ ์
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ณผ์ ์์ ์ ํ์ ์๊ฐ์ ์ต์ ์ด๋ผ๊ณ ์๊ฐ๋๋ ๊ฒฐ์ ์ ์ ํํ์ฌ ํด๋ฅผ ๊ตฌํ๋ค. ๋งค ์ ํ์์ ์ง๊ธ ์ด ์๊ฐ ๋น์ฅ ์ต์ ์ธ ๋ต์ ์ ํํ์ฌ ์ ํฉํ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ์๋ ๋ชจํ ๋ฅผ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ ๊ธฐ๋ฒ์ด๋ค. ์ ์ฒด๋ฅผ ๋ณด์ง ๋ชปํ๊ณ ๊ตญ์์ ์ธ ๊ด์ ์์ ํด๋ฅผ ๊ตฌํ๊ฒ ๋๋ฏ๋ก, ์ต์ข ์ ์ผ๋ก ์ป์ ํด๊ฐ ๊ถ๊ทน์ ์ผ๋ก ์ต์ ์ด๋ผ๋ ๋ณด์ฅ์ด ์๋ค.
2.2 ์ ์ฉ
Kruskal ์๊ณ ๋ฆฌ์ฆ
Prim ์๊ณ ๋ฆฌ์ฆ
Dijkstra ์๊ณ ๋ฆฌ์ฆ
ํํ๋ง ์ฝ๋(Huffman code)
๋ฐฐ๋ญ ๋ฌธ์ (Knapsack problem)
ํธ๋ฆฌ ์ ์ ๋ถํ (Tree Vertex Splitting Problem: TVSP)
3. ๋์ ํ๋ก๊ทธ๋๋ฐ(Dynamic Programming)
3.1 ์ ์
๋ณต์กํ ๋ฌธ์ ๋ฅผ ๊ฐ๋จํ ์ฌ๋ฌ ๊ฐ์ ์์ ๋ฌธ์ ๋ก ๋๋์ด ํธ๋ ์๊ณ ๋ฆฌ์ฆ. ๋ถํ ์ ๋ณต๊ณผ๋ ๋ฌ๋ฆฌ, ๋ถ๋ถ ๋ฌธ์ ๋ค์ด ์๋ก ๊ฒน์น๋ค. ๋์ ํ๋ก๊ทธ๋๋ฐ์์๋ ์์ ๋ฌธ์ ์์ ๋์จ ํด๋ฅผ ์ ์ฅํด ๋์๋ค๊ฐ ์์ ๋ฌธ์ ์ ํด๋ฅผ ๊ตฌํ ๋ ์ด์ฉํ๋ค. ๋ฐ๋ผ์ ์ด์ ๋จ๊ณ์ ํด๋ฅผ ์ด์ฉํ๊ธฐ ์ํด ๊ทธ๊ฒ์ ๊ธฐ์ตํ ์ ์๋ ์ ์ฅ์๊ฐ ํ์ํ๋ค.
3.2 ์ ๋ต
โ ํ๋์ ํฐ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ๋ถ๋ถ ๋ฌธ์ ๋ก ๋๋๋ค.
โก ๊ฐ์ฅ ์์ ๋จ์์ ํ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. ์ด ๋, ์์ ๋ฌธ์ ๋ค์ ํด๋ค์ ์ ์ฅ์์ ์ ์ฅํ๋ค.
โข ์ด ํ์ ๋ฌธ์ ์ ํด๋ต์ ์ด์ฉํด ์์ ๋ถ๋ถ๋ฌธ์ ๋ค์ ํด๋ฅผ ๊ตฌํด ๋๊ฐ๋ค.
3.3 ์ ์ฉ
๋ค๋จ๊ณ ๊ทธ๋ํ(Multistage graphs)
Ford ์๊ณ ๋ฆฌ์ฆ
๋ฌธ์์ด ํธ์ง
0/1 ๋ฐฐ๋ญ ๋ฌธ์
4. ํด๊ฐ๊ฒ์(Backtracking)
4.1 ์ ์
์ด๋ค ๋ฌธ์ ์ ์ต์ ํด๋ฅผ ๊ตฌํ๊ธฐ ์ํด ๋ชจ๋ ๊ฐ๋ฅ์ฑ์ ์๋ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ํ๋ณด ํด๋ค์ ๋จ๊ณ์ ์ผ๋ก ์์ฑํด ๊ฐ๋ ๊ณผ์ ์์ ๊ธฐ์ค ํจ์๋ฅผ ํตํด ํ๊ฐํ์ฌ ์ต์ข ํด๊ฐ ๋ ์ ์๋ค๊ณ ํ๋จ๋๋ฉด ํ์์ ๋ฉ์ถ๊ณ ์ด์ ๋ถ๊ธฐ์ ์ผ๋ก ๋์๊ฐ์ ๋ค๋ฅธ ํ๋ณด ํด๋ฅผ ํ์ํ๋ค. ํํ๋ค์ ์ํ๋ฅผ ๋ด๊ณ ์๋ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ์ฌ ํด ๊ณต๊ฐ์ ์ฒด๊ณ์ ์ผ๋ก ํ์ํ๊ณ ๋ฌธ์ ์ ํด๋ฅผ ๊ตฌํ๋ค.
4.2 ์ฉ์ด
- ๋ฌธ์ ์ํ(problem state) : ํธ๋ฆฌ์ ํฌํจ๋ ๊ฐ ๋ ธ๋
- ํด ์ํ(solution state) : ๋ฌธ์ ์ํ๋ค ์ค, ๋ฃจํธ๋ก๋ถํฐ ๊ทธ ๋ ธ๋๊น์ง์ ๊ฒฝ๋ก๊ฐ ํด๊ฐ ๋ ์ ์๋ ํํ
- ํด๋ต ์ํ(answer state) : ํด ์ํ๋ค ์ค, ์ ์ฝ์กฐ๊ฑด๋ค์ ๋ง์กฑํ๋ ํด ์ํ
- ์ํ ๊ณต๊ฐ ํธ๋ฆฌ(state space tree) : ์ด๋ฌํ ํด ๊ณต๊ฐ์ ๋ํ ํธ๋ฆฌ ๊ตฌ์ฑ
- ์ ์ ํธ๋ฆฌ(static tree) : ํญ์ ๊ฐ์ ํํ๋ก ๋ง๋ค์ด์ง๋ ์ํ ๊ณต๊ฐ ํธ๋ฆฌ
- ๋์ ํธ๋ฆฌ(dynamic tree) : ๋ฌธ์ ์ ์ฌ๋ก์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ํํ๋ก ๋ง๋ค์ด์ง๋ ์ํ ๊ณต๊ฐ ํธ๋ฆฌ
- ์ด์์๋ ๋ ธ๋(live node) : ์ด๋ฏธ ์์ฑ๋์์ผ๋ ์์ง ์์ ๋ ธ๋๋ค์ด ๋ชจ๋ ์์ฑ๋์ง ์์ ๋ ธ๋
- E-๋ ธ๋ : ์ด์์๋ ๋ ธ๋ ์ค, ํ์ฌ ์์์ ์์ฑํ๊ณ ์๋ ๋ ธ๋
- ์ฃฝ์ ๋ ธ๋(dead node) : ์ด๋ฏธ ์์ฑ๋ ๋ ธ๋๋ก์ ํ์ฅ๋ ์ ์๊ฑฐ๋ ์์๋ค์ด ๋ชจ๋ ์์ฑ๋ ๋ ธ๋
4.3 ์ ์ฉ
N-queen ๋ฌธ์
๋ถ๋ถ์งํฉ์ ํฉ
๊ทธ๋ํ ์ฑ์
5. ๋ถ๊ธฐํ์ ๋ฒ(Branch and Bound)
5.1 ์ ์
ํด๊ฐ๊ฒ์๊ณผ ์ ์ฌํ์ง๋ง, ์ต์ ํ ๋ฌธ์ ์๋ง ์ ์ฉํ ์ ์๋ค. ๋ชจ๋ ํ๋ณด ํด๋ฅผ ์ํ ๊ณต๊ฐ ํธ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์ฒด๊ณ์ ์ผ๋ก ํ์ํ๊ณ , ํ ๋ ธ๋๊ฐ ์ต์ข ํด๊ฐ ๋ ์ ์๋ค๊ณ ํ๋จ๋๋ฉด ๊ทธ ๋ ธ๋๋ฅผ ์ ๊ฑฐํด ๋๊ฐ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ์ ํด์ง ๋ฒ์(Bound)๋ฅผ ๋ฒ์ด๋๋ ๊ฐ๋ค์ ๊ฐ์ง์น๊ธฐ(Branch)๋ฅผ ํ์ฌ ๊ฒฐ๊ณผ ํด๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ค.
5.2 ์ ๋ต
โ ์ํ ๊ณต๊ฐ ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๋ฅผ ๊ฒ์ํ ๋๋ง๋ค ๊ทธ ๋ ธ๋๊ฐ ์ ๋งํ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ํ๊ณ์น(bound)๋ฅผ ๊ณ์ฐํ๋ค.
โก ๊ทธ ํ๊ณ์น๋ ๊ทธ ๋ ธ๋๋ก๋ถํฐ ํ์ฅํ์ฌ ์ป์ ์ ์๋ ํด๋ต์ ํ๊ณ์น๋ฅผ ๋ํ๋ธ๋ค.
โข ๋ง์ฝ ๊ทธ ํ๊ณ์น๊ฐ ์ง๊ธ๊น์ง ์ฐพ์ ์ต์ ์ ํด๋ณด๋ค ์ข์ ๊ฒฝ์ฐ๋ ํ์์ ๊ณ์ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํ์์ ๋ฉ์ถ๋ค.
5.3 ์ ์ฉ
15-ํผ์ฆ ๋ฌธ์
N-queen ๋ฌธ์
์ผ ๋ฐฐ์
์ฐธ๊ณ
- ์ด์ถฉ๊ธฐ, ใ์๋ฐ๋ก ์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆใ, ๋ฐฐ์ํฐ(2019), p.12, p.403
- https://ko.wikipedia.org/wiki/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98
'algorithm > theory' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ถํ ์ ๋ณต(Divide and Conquer) (0) | 2021.05.19 |
---|