algorithm/theory

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„๊ธฐ๋ฒ• ์ •๋ฆฌ

์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€?

- ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ˆœ์„œ๋Œ€๋กœ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ธฐ์ˆ ํ•œ ๊ฒƒ
- ์–ด๋– ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ •ํ•ด์ง„ ์ผ๋ จ์˜ ์ ˆ์ฐจ๋‚˜ ๋ฐฉ๋ฒ•์„ ๊ณต์‹ํ™”ํ•œ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ
- ๋ฌธ์ œ ํ•ด๊ฒฐ์— ํ•„์š”ํ•œ ๊ณ„์‚ฐ ์ ˆ์ฐจ ๋˜๋Š” ์ฒ˜๋ฆฌ ๊ณผ์ •์˜ ์ˆœ์„œ
- ์ œํ•œ๋œ ์‹œ๊ฐ„๊ณผ ๊ณต๊ฐ„ ์•ˆ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ์ง€ ์ •์˜ํ•œ ๋กœ์ง
- ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ํŠน์ •ํ•œ ์ž…๋ ฅ์„ ๋ฐ›์•„์„œ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ์ธ ํ•ด๋ฅผ ์ถœ๋ ฅ

 

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

- https://m.blog.naver.com/PostView.naver?blogId=jvioonpe&logNo=220234068594&proxyReferer=https:%2F%2Fwww.google.com%2F 

- https://destiny738.tistory.com/241

'algorithm > theory' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ถ„ํ•  ์ •๋ณต(Divide and Conquer)  (0) 2021.05.19