ํฌ์ŠคํŠธ

๐ŸŒ“ Back Tracking

๐Ÿ’ซ Back Tracking


ํ˜„์žฌ ์ƒํƒœ์—์„œ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํ›„๋ณด๊ตฐ์„ ๋”ฐ๋ผ ๋“ค์–ด๊ฐ€๋ฉฐ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
Like ํ”„๋ฆฐ์„ธ์Šค ๋ฉ”์ด์ปค, ๋ฏธ์—ฐ์‹œ, ์—ญ์ „ ์žฌํŒ, ๊ฒ€์€๋ฐฉ, ํšŒ์ƒ‰๋„์‹œ, ๋ฌธ๋ช… ๋“ฑ ์„ ํƒ์ง€๊ฐ€ ๋‚˜๋ˆ ์ง€๋Š” ๊ฒŒ์ž„์—์„œ ์„ธ์ด๋ธŒ ํŒŒ์ผ์„ ํ†ตํ•ด ํ˜„์žฌ ์„ ํƒ ์ดํ›„, ๋‹ค๋ฅธ ์„ ํƒ์ง€๋„ ์„ ํƒํ•ด๋ณด๊ณ , ๋ชจ๋“  ์„ ํƒ์ง€๋ฅผ ๋‹ค ํ”Œ๋ ˆ์ด ํ•ด๋ณด๋Š” ๋ฐฉ๋ฒ•
Like ์•ŒํŒŒ๊ณ 

์ƒํƒœ๊ณต๊ฐ„ํŠธ๋ฆฌ

๋ฐฑํŠธ๋ž˜ํ‚น์€ ์ƒํƒœ๋ฅผ ๋„˜๋‚˜๋“ ๋‹ค
์ƒํƒœ๋ฅผ ๋„˜๋‚˜๋“ ๊ฐ€๋Š” ๊ฒƒ์€, ์˜ˆ๋ฅผ ๋“ค์–ด ์–ด๋–ค ์‹œ์ ์˜ ๋ฆฌ์ŠคํŠธ์—์„œ ๋‹ค๋ฅธ ์‹œ์ ์˜ ๋ฆฌ์ŠคํŠธ๋กœ ๋„˜์–ด๊ฐ„๋‹ค๋Š” ๊ฒƒ


Like ๋ณด๋ฌผ์ฐพ๊ธฐ, ์–ด๋”˜๊ฐ€ ์ˆจ์–ด ์žˆ๋Š” ๋ณด๋ฌผ(ํ•ด๋‹ต)์„ ์ฐพ๋Š” ๊ฒƒ
๋ณด๋ฌผ์„ ์ฐพ์œผ๋ ค๋ฉด ํžŒํŠธ๊ฐ€ ์žˆ๋Š” ์ง€๋„(Map)๊ฐ€ ์žˆ์–ด์•ผํ•จ

๋ชจ๋“  ๊ณณ์„ ๋’ค์ ธ๋ด๋„ ๋˜์ง€๋งŒ,
๋ณด๋‹ค ๋นจ๋ฆฌ, ํšจ์šธ์ ์œผ๋กœ ์ฐพ์•„๋ณด์ž๋Š” ๊ฒƒ

๋ณด๋ฌผ์„ ์ฐพ์•„๋‚ด๋Š” ์ „๋žต์ด ์ค‘์š” (์ „๋žต์— ๋”ฐ๋ผ ๋ฐฑํŠธ๋ž˜ํ‚น์˜ ํšจ์œจ์ด)
i.e. ๋ณด๋ฌผ์ด ์žˆ์„ ๋งŒํ•œ ๊ณณ๋งŒ ์ฐพ์•„๋ณธ๋‹ค๋˜์ง€ (์—†๋Š” ๊ณณ์€ ํŒจ์Šค)

Backtracking - ๋˜๋Œ์•„๊ฐ„๋‹ค
๋˜๋Œ์•„๊ฐ€๊ฑฐ๋‚˜ ๋˜์งš์–ด ๊ฐ€๋ ค๋ฉด, ์ด๋ฏธ ์ง€๋‚˜์˜จ ๊ธธ์ด ๋‹น์—ฐํžˆ ๋ฐ˜๋“œ์‹œ ์กด์žฌ
Why, ๋” ์ด์ƒ ์ด ๊ธธ๋กœ ๊ฐˆ ์ˆ˜๊ฐ€ ์—†๊ฑฐ๋‚˜ (ํ•„์š”๊ฐ€ ์—†๋‚˜), ์ด๋ฏธ ๋‹ค ๊ฐ€๋ณธ ๊ธธ
(์ง€๋‚˜๊ฐ„ ๊ธธ์„ ๊ธฐ์–ต)
So, ๋˜๋Œ์•„๊ฐ€์„œ ์ƒˆ๋กœ์šด ๊ธธ์„ ์ฐพ๊ธฐ ์œ„ํ•จ

i.e. ๋ฏธ๋กœ ์ฐพ๊ธฐ
์ถœ๊ตฌ๋ฃฐ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ๋ฐ˜๋ณต

  1. ๋ถ„๊ธฐ์ ์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธธ์„ ๋”ฐ๋ผ ๊ฐ„๋‹ค. ์ด ๋•Œ ์ง€๋‚˜๊ฐ€๋Š” ๊ธธ์€ ํ‘œ์‹œ
  2. ๋ถ„๊ธฐ์ ์„ ๋งŒ๋‚˜๋ฉด ํ•œ ๊ธธ์„ ์„ ํƒํ•˜์—ฌ ์—ญ์‹œ ํ‘œ์‹œํ•˜๋ฉด์„œ ๊ณ„์† ์ง„ํ–‰
  3. ๊ธธ์ด ๋ง‰ํ˜€ ์žˆ์œผ๋ฉด ์ง์ „ ๋ถ„๊ธฐ์ ์œผ๋กœ ๋˜๋Œ์•„๊ฐ
  4. ์‹œ๋„ํ•˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ๊ธธ์„ ์„ ํƒํ•˜์—ฌ 1 ์‹œ์ž‘
  5. ๋ชจ๋“  ๊ธธ์„ ์‹œ๋„ํ•˜์˜€๋‹ค๋ฉด ์ง์ „ ๋ถ„๊ธฐ์ ๊นŒ์ง€ ๋˜๋Œ์•„๊ฐ€๊ณ , 4 ์‹œ์ž‘

๋ฐฑํŠธ๋ž˜ํ‚น์€ ์–ด๋–ค ์ผ์„ ํ•œ ์ดํ›„์— ๊ทธ ์ผ์„ ๋˜๋ฌผ๋ฆฌ๋Š”(Undo, ์—†๋˜ ์ผ๋กœ) ๊ฒƒ๊นŒ์ง€ ํฌํ•จ

i.e. ๊นŠ์ด์šฐ์„ ํƒ์ƒ‰ DFS
๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ  ๊ธฐ๋ก, ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ž์‹ ๋…ธ๋“œ๋“ค์— ๋Œ€ํ•ด ๋‹ค์‹œ DFS
๋” ์ด์ƒ ๋ฐฉ๋ฌธํ•  ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด, ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ๋Œ์•„๊ฐ (Backtracking)

์ง€๋„
๊ฒฐ๋ก ์ ์œผ๋กœ ๋ชจ๋“  ์ง€๋„๋Š” Tree๋กœ ๋‚˜ํƒ€๋ƒ„, Tree๋ฅผ ๋”ฐ๋ผ๋‹ค๋‹ˆ๋ฉฐ ํ•ด๊ฒฐ
Tree๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋…ธ๋“œ๋“ค์„, ์ƒํƒœ

๐Ÿซง ํ•ต์‹ฌ

  1. ํŠธ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค๊ฑฐ๋ƒ/๋ชจ๋ธ๋ง ํ• ๊ฑฐ๋ƒ
  2. ์ „๋žต์„ ์„ธ์šฐ๋Š” ์ผ (์ „์ฒด ํŠธ๋ฆฌ ์ค‘์— ์•ˆ ๋ฐฉ๋ฌธํ•ด๋„ ๋˜๋Š” ์„œ๋ธŒํŠธ๋ฆฌ/๋…ธ๋“œ ๋ฐœ๊ตด)

DFS๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ ์ง€์ˆ˜ ์‹œ๊ฐ„ ์ด์ƒ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฒ•

  • DFS์™€ ์ฐจ๋ณ„๋˜๋Š” ๊ฑฐ์˜ ์œ ์ผํ•œ ํŠน์„ฑ์€ ๊ฐ€์ง€์น˜๊ธฐ
    • ๊ฐ€์ง€์น˜๊ธฐ๊ฐ€ ๊ฑฐ์˜ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๋ฌด์ž‘์œ„ ๊ธฐ๋ฒ•๊ณผ ์œ ์‚ฌ
    • ๊ฐ€์ง€์น˜๊ธฐ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๋…ธ๋“œ๊ฐ€ ๋‹จ๋ง ๋…ธ๋“œ์— ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ํšจ๊ณผ๊ฐ€ ์—†์Œ. But ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ ์—์„œ ๊ฐ€์ง€์น˜๊ธฐ๋Š” ์ž˜ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ
    • ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์€ ์ •๋ณด๊ฐ€ ์ถ•์ ๋œ ๋‹จ๋ง ๋…ธ๋“œ ์ชฝ์—์„œ ๋ฐœ์ƒํ•  ํ™•๋ฅ ์ด ๋†’์Œ

๐Ÿ’ซ ์ƒํƒœ State


์ƒํƒœ State
์‹œ์ž‘ํ•ด์„œ ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ • ์ค‘์„ ํŠน์ • ์ˆœ๊ฐ„, ์Šค๋ƒ…์ƒท์„ ์ƒํƒœ๋กœ (๋ฌผ๋ก  ์˜๋ฏธ์žˆ๊ฒŒ ๊ตฌ๋ถ„๋˜๋Š” ์ˆœ๊ฐ„)

i.e. ๋ฐ”๋‘‘/์ฒด์Šค/์˜ค๋ชฉ/ํ‹ฑํƒํ†  ๋“ฑ ํ„ด์ œ ๋ณด๋“œ ๊ฒŒ์ž„ : ์–ด๋–ค ํ•œ ์ˆœ๊ฐ„์˜ ๋ฐ”๋‘‘ํŒ/์ฒด์ŠคํŒ/ํŒ ๋ชจ์Šต
i.e. 0-1 ๋ฐฐ๋‚ญ ๋ฌธ์ œ : ์–ด๋–ค ํ•œ ์ˆœ๊ฐ„์˜ ๋ฐฐ๋‚ญ ๋ชจ์Šต (์–ด๋–ค ๋ฌผ๊ฑด์ด ๋“ค์–ด์žˆ๊ณ  ์ด ๋ฌด๊ฒŒ์˜ ์ด์ต์€ ์–ผ๋งˆ์ธ๊ฐ€)

  1. ์‹œ์ž‘ ์ƒํƒœ์—์„œ ์ถœ๋ฐœ
    • i.e. ์˜ค๋ชฉ : ๋นˆ ๋ฐ”๋‘‘ํŒ
    • i.e. 0-1 ๋ฐฐ๋‚ญ ๋ฌธ์ œ : ๋นˆ ๋ฐฐ๋‚ญ
  2. ์ฃผ์–ด์ง„ ๊ทœ์น™์— ๋”ฐ๋ผ ์ƒํƒœ๋ฅผ ๊ณ„์†ํ•ด์„œ ๋ณ€ํ™”
    • i.e. ์˜ค๋ชฉ : ์ˆœ์„œ์— ๋งž๊ฒŒ ๋Œ์„ ๋‘˜ ๋•Œ๋งˆ๋‹ค (์ƒํƒœ๊ฐ€ ๋ณ€ํ™”)
    • i.e. 0-1 ๋ฐฐ๋‚ญ ๋ฌธ์ œ : ํ•ด๋‹น ๋ฌผ๊ฑด์„ ์ง‘์–ด๋„ฃ๊ฑฐ๋‚˜ ์ง‘์–ด๋„ฃ์ง€ ์•Š๊ฑฐ๋‚˜๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ๋งˆ๋‹ค (์ƒํƒœ๊ฐ€ ๋ณ€ํ™”)
  3. ์ตœ์ข… ์ƒํƒœ
    • i.e. ์˜ค๋ชฉ : ๋ˆ„๊ฐ€ ์Šน๋ฆฌํ•œ ์ƒํƒœ
    • i.e. 0-1 ๋ฐฐ๋‚ญ ๋ฌธ์ œ : ๋ชจ๋“  ๋ฌผ๊ฑด์— ๋Œ€ํ•œ ๊ฒฐ์ •์ด ๋๋‚œ ์ƒํƒœ
  4. ์›ํ•˜๋Š” ํ•ด๋‹ต์ธ ์ตœ์ข… ์ƒํƒœ์ผ ์ˆ˜๋„ ์žˆ๊ณ , ํ•ด๋‹ต์ด ์•„๋‹Œ ์ตœ์ข… ์ƒํƒœ๋„ ๊ฐ€๋Šฅ
    • i.e. ์˜ค๋ชฉ : ์šฐ๋ฆฌํŽธ์ด ์ด๊ธด ์ตœ์ข… ์ƒํƒœ์™€ ์ƒ๋Œ€๋ฐฉ์ด ์ด๊ธด ์ตœ์ข… ์ƒํƒœ
    • i.e. 0-1 ๋ฐฐ๋‚ญ ๋ฌธ์ œ : ์ด์ต์ด ์ตœ๋Œ€์ธ ์ตœ์ข… ์ƒํƒœ์™€ ๊ทธ๋ณด๋‹ค๋Š” ์ž‘์€ ์ตœ์ข… ์ƒํƒœ

์ตœ์ข…์ƒํƒœ๋Š” ํ›„๋ณดํ•ด Candidate Solution๋ผ ๋ถ€๋ฅด๊ธฐ๋„ ํ•จ
์ฃผ์˜ : ๋Œ€๋ถ€๋ถ„์€ ์ตœ์ข… ์ƒํƒœ์— ํ•ด๋‹ต์ด ์žˆ๋Š”๋ฐ, ์–ด๋–ค ๋ฌธ์ œ๋Š” ์ตœ์ข… ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ ํ•ด๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ

๐Ÿ’ซ ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ - State Space, Prolem Space


์‚ถ

์ง€๊ธˆ ์ด ์ˆœ๊ฐ„์˜ ๋‚ด ๋ชจ์Šต์ด ์ตœ์ข… ์ƒํƒœ๋ผ๋ฉด,
ํƒ„์ƒ์œผ๋กœ๋ถ€ํ„ฐ ์ง€๊ธˆ๊นŒ์ง€ ์žˆ์—ˆ๋˜, ์žˆ์„ ์ˆ˜ ์žˆ๋˜ ์ˆ˜๋งŽ์€ ๊ฐˆ๋ฆผ๊ธธ์ด ์ƒํƒœ์ธ ๊ฒƒ์ด๊ณ ,
๊ทธ๋Ÿฐ ์ˆ˜๋งŽ์€ ๊ฐˆ๋ฆผ๊ธธ์„ ์†์— ์žˆ์„ ์ˆ˜ ์žˆ์—ˆ๋˜, ์–ด์ฉŒ ์ง€๊ธˆ ๋‚ด ๋ชจ์Šต์ผ ์ˆ˜๋„ ์žˆ์—ˆ๋˜, ๋˜ ๋‹ค๋ฅธ ๋‚˜์˜ ๋ชจ์Šต์˜ ๋ฌดํ•œํ•œ ๊ฐ€๋Šฅ์„ฑ๋“ค์˜ ๊ธธ์„ ๊ทธ๋ ค ํ•œ๋ฐ ๋ชจ์€ ๊ฒƒ์ด ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ์™€ ๊ฐ™์€ ๊ฒƒ์ด๋‹ค.

๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ƒํƒœ๋ฅผ ํŠธ๋ฆฌ๋กœ ๋ฌถ์–ด ๋‚ธ ๊ฒƒ
๊ฐ ์ƒํƒœ๋Š” ์ด์ „ ์ƒํƒœ๋กœ๋ถ€ํ„ฐ ๋ณ€ํ•œ ๊ฒƒ์ด๊ณ , ์ด๋Š” ๋‹ค๋ฅธ ๋ชจ์Šต์˜ ์ดํ›„ ์ƒํƒœ๋กœ ๋ณ€ํ™”ํ•ด๋‚˜๊ฐ
์‹œ์ž‘ ์ƒํƒœ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ์ „์ด(Transition)๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ดํ›„ ์ƒํƒœ๋ฅผ ์ž์‹ ๋…ธ๋“œ๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  ์ด ๊ณผ์ •์„ ์ตœ์ข… ์ƒํƒœ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋ฐ˜๋ณต -> ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ

  • ๋…ธ๋“œ : ์ƒํƒœ
  • ๋ฃจํŠธ ๋…ธ๋“œ : ์‹œ์ž‘ ์ƒํƒœ
  • ๋ถ€๋ชจ ๋…ธ๋“œ : ์ด์ „ ์ƒํƒœ
  • ์ž์‹ ๋…ธ๋“œ : ์ดํ›„ ์ƒํƒœ

i.e. 0-1 ๋ฐฐ๋‚ญ ๋ฌธ์ œ์˜ ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ
@ 5_0000
1', 2, 1', 2, 3', 1', 2, 3', 4' ๋Š” ๋ฐฐ๋‚ญ ๋ชจ์–‘์€ ๋˜‘๊ฐ™์ง€๋งŒ (๋ฌผ๊ฑด 2๋งŒ ๋“ค์–ด๊ฐ€ ์žˆ์ง€๋งŒ), ์„œ๋กœ ๋‹ค๋ฅธ ์ƒํƒœ

์œ ๋งํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ(Nonpromising Node) : ์ž์‹์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†์Œ (๊ฑฐ๊ธฐ๋กœ ๊ฐ€๋ด์•ผ ๋ณด๋ฌผ์ด ์—†์–ด, ๋‹ต์ด ์—†์–ด, ๋‚œ๊ฐ€?)
์œ ๋งํ•œ ๋…ธ๋“œ (Promising Node) : ํ•ด๋‹ต์„ ์–ป๊ธฐ ์œ„ํ•ด ์ž์‹ ๋…ธ๋“œ๋กœ ์ง„ํ–‰ํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ (์š”์˜ค๋งํ•œ ๋…ธ๋“œ ใ„ทใ„ท; ๋ฏธ๋ž˜๊ฐ€ ์ฐฝ์ฐฝํ•œ, ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š”)

์œ ๋งํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋Šฅํ•œ ๋งŽ์ด ๊ฑธ๋Ÿฌ๋‚ด๋Š” ์ „๋žต์ด ๋งค์šฐ ์ค‘์š” - ๊ฐ€์ง€์น˜๊ธฐ Proning
๋‹ต์ด ์—†๋Š” ๊ฒƒ๋“ค์„ ๋ฏธ๋ฆฌ ์ณ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฐ๊ด€์•ˆ์ด ์ค‘์š”ํ•˜๋‹ค.

๐Ÿ’ซ ์ฝ”๋“œ ๊ตฌ์กฐ์™€ ์ตœ์ ํ™”


๐Ÿซง DFS

์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ์˜ ํƒ์ƒ‰์—๋Š”, ํšจ์œจ์ ์ธ ํƒ์ƒ‰์„ ์œ„ํ•ด, ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์šฉ์ดํ•œ DFS๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
๊ทธ๋ž˜ํ”„ DFS๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ํŠธ๋ฆฌ DFS๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด์ง„ ํŠธ๋ฆฌ์˜ ์ „์œ„ ์ˆœํšŒ๋ฅผ, ํŠธ๋ฆฌ์˜ ์ „์œ„ ์ˆœํšŒ๋กœ ์ผ๋ฐ˜ํ™”ํ•œ๋‹ค. (๊ฐ€์žฅ ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋…ธ๋“œ๋ถ€ํ„ฐ ~)

1
2
3
4
5
6
void DFS_Tree(Node node)
{
	DoSomething();
	foreach (Node child in node.Childs)
		DFS_tree(child);
}
  • Why Not BFS?
    • ๋‹ต์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์ตœ์ข… ๋‹จ๊ณ„, ์ตœ์ข…/๋ง๋‹จ ๋…ธ๋“œ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ•˜๋‚˜๋ผ๋„ ๋นจ๋ฆฌ ๋ง๋‹จ ๋…ธ๋“œ๊นŒ์ง€ ๊ฐ€์„œ ๋‹ต์ธ์ง€ ์•„๋‹Œ์ง€ ํ™•์ธํ•ด๋ณด๋Š”๊ฒŒ ๋” ๋น ๋ฅด๋‹ค.
    • ์ƒํƒœ๋ฅผ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
      • ์ด์ „ ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•ด์•ผ ํ•˜๋Š”๋ฐ, BFS๋Š” ๋ฐ”๋กœ ์ด์ „ ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ์ •๋ณด๋„ ํ•จ๊ป˜ ๊ธฐ์–ตํ•ด์•ผ ๋œ๋‹ค. ๋น„์ง๊ด€์ ์ด๊ณ , ๋น„ํšจ์œจ์ ์ด๋‹ค.
      • DFS์—์„œ๋Š” ๋ฐ”๋กœ ์ด์ „ ์ƒํƒœ๋งŒ ๊ธฐ์–ตํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ง๊ด€์ ์ด๊ณ  (์ž์—ฐ์Šค๋Ÿฝ๊ณ ), ํšจ์œจ์ ์ด๋‹ค.
      • ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๋Š” ์ด์ „์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ์ด๊ณ , ์ž์‹ ๋…ธ๋“œ๋งŒ์„ ๋Œ€์ƒ์œผ๋กœ DFS๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ธฐ์–ตํ•˜๊ฑฐ๋‚˜ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

๐Ÿซง DFS๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์“ฐ๊ธฐ ์œ„ํ•œ ์ „๋žต

DFS์™€ Back-Tracking์˜ ์ฐจ์ด์ , Purning ์œ ๋ฌด

  1. Pruning ๊ฐ€์ง€์น˜๊ธฐ : ์œ ๋งํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ ๊ฑธ๋Ÿฌ๋‚ด๊ธฐ
  2. ์œ ๋งํ•œ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ๋งŒ ์ˆœํ™˜ํ˜ธ์ถœ(Backtracking)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// ๋ฐฑํŠธ๋ž˜ํ‚น์˜ ๊ณตํ†ต๋œ ๊ตฌ์กฐ, DFS์— ์ด๊ฒƒ์ €๊ฒƒ ๋ถ™์ธ ์ •๋„
void Backtracking(Node v)
{
	if (Promising(v)) // 1. ์š”๋งํ•œ ๋†ˆ์— ๋Œ€ํ•ด์„œ๋งŒ (๊ฐ€์ง€์น˜๊ธฐ, Pruning)
		return;

	if (IsSolution(v)) // ํ•ด๋‹ต์ด๋ผ๋ฉด ?
	{
		OutputSolution(v); // ๋ (์ง„ํ–‰์„ ๋๋‚ด๋Š” ์ฝ”๋“œ๊ฐ€ ์ƒ๋žต๋จ)
	}
	else // ํ•ด๋‹ต์ด ์•„๋‹ˆ๋ผ๋ฉด ?
	{
		// 2. (์š”๋งํ•œ ๋†ˆ์— ๋Œ€ํ•ด์„œ๋งŒ Backtrackingํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์ƒ๋žต๋จ)
		foreach (var child in v.Childs)
			Backtracking(child);
	}
}

๐Ÿซง ์ตœ์ ํ™” ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๊ตฌ์กฐ

  • ๋ชจ๋“  ํ•ด๋‹ต์„ ๋‹ค ์ฐพ์•„์•ผ ํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ฐฑํŠธ๋ž˜ํ‚น: N-Queen
  • ๊ฒฐ์ • ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ฐฑํŠธ๋ž˜ํ‚น: ํ•ด๋ฐ€ํ„ด ์‚ฌ์ดํด ๋ฌธ์ œ
  • ์ตœ์ ํ™” ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ฐฑํŠธ๋ž˜ํ‚น
    • ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ๋ฅผ ๋ชจ๋‘ ๋’ค์ง€๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ
    • ํ˜„์žฌ๊นŒ์ง€์˜ ์ตœ์ ํ•ด๋ฅผ ํ•ญ์ƒ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€, ๋ฐฉ๋ฌธํ•˜๋Š” ์ƒˆ ๋…ธ๋“œ์˜ ํ•ด์™€ ๋น„๊ตํ•œ ํ›„ ์ƒˆ ๋…ธ๋“œ์˜ ํ•ด๊ฐ€ ๋” ๋‚ซ๋‹ค๋ฉด ์ตœ์ ํ•ด ๊ฐ’์„ ๋ณ€๊ฒฝ(๊ฐฑ์‹ )
1
2
3
4
5
6
7
8
void BT_OPT(Node v)
{
	optimal = Winner(optimal, Solution(v));
	
	if (Promising(v))
		foreach (Node child in v.childNodes)
			BT_OPT(child);
}

๐Ÿซง ๊ทธ ์™ธ ์ „๋žต

  • ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ˆœํ™˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๊ฐ’์ด ๋ณ€ํ•˜๋Š” ๋ณ€์ˆ˜๋งŒ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ธฐ๊ณ  ์ˆœํ™˜ํ˜ธ์ถœ์—์„œ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜๋กœ ์„ ์–ธ

  • ํŠธ๋ฆฌ

    1. ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. (์ด์ง„ํŠธ๋ฆฌ์ผ๋•Œ, 2^n)
    2. ๋„ˆ๋ฌด ํฌ๋‹ค (๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„)
      • So, ์‹ค์ œ ๊ตฌํ˜„์—์„œ๋Š” ํŠธ๋ฆฌ๋ฅผ ์•ˆ๋งŒ๋“ค๊ณ  ์‹œ์ž‘ํ•œ๋‹ค (๋Œ€์•ˆ)
      • ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํƒ์ƒ‰ํ•˜๋Š” ๋…ธ๋“œ์˜ ์ƒํƒœ๋ฅผ ๋ฐฐ์—ด์— ๊ธฐ๋กํ•˜๊ณ  ์ถ”์ 
        • ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ์˜ ํƒ์ƒ‰ ๊ณผ์ •์„ ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜
        • ์œ ๋งํ•œ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฐฐ์—ด์— ๊ธฐ๋กํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”

i.e. 0-1 ๋ฐฐ๋‚ญ ๋ฌธ์ œ์—์„œ ๋…ธ๋“œ์˜ ์ƒํƒœ ๊ธฐ๋ก
๊ฐ ๋ ˆ์ด์–ด/๋ ˆ๋ฒจ์—์„œ ๊ธฐ์–ตํ•ด์•ผ ํ•  ์ •๋ณด๋Š”, ๋ฌผ๊ฑด์„ ๋ฐฐ๋‚ญ์— ๋„ฃ์—ˆ๋ƒ ์•ˆ๋„ฃ์—ˆ๋ƒ ๋”ฑ ํ•˜๋‚˜
๋”ฐ๋ผ์„œ ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค, ํ˜„์žฌ ๋ ˆ์ด์–ด/๋ ˆ๋ฒจ์— ๋“ค์–ด๊ฐˆ ์ •๋ณด ํ•˜๋‚˜๋ฅผ ๋„ฃ์Œ
๊ทธ๋ž˜์„œ ๊ฐ ๋ ˆ์ด์–ด/๋ ˆ๋ฒจ์„ ์˜ค๋ฅด๋ฝ ๋‚ด๋ฆฌ๋ฝํ•˜๋ฉด์„œ ๋‹ต์„ ์ฐพ์Œ -> ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ ˆ์ด์–ด ๋†’์ด ๋งŒํผ์˜ 1์ฐจ์› ๋ฐฐ์—ด ํ•˜๋‚˜๋งŒ ์žˆ์œผ๋ฉด ๋จ

๐Ÿ’ซ ์ด์šฉ


N-Queen
ํ•ด๋ฐ€ํ„ด ์‚ฌ์ดํด
K-Graph-Coloring
Subset-Sum-Problem
0-1-KnapSack-Problem

๐Ÿ’ซ Branch and Bound


  • ๋ฐฑํŠธ๋ž˜ํ‚น๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋Œ€๊ฐœ BFS์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ตœ๊ณ  ์šฐ์„  ๊ฒ€์ƒ‰(best-first search) ์‚ฌ์šฉ
    • ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•œ ํ›„ ์ž์‹ ๋…ธ๋“œ๋“ค์„ ๋Œ€์ƒ์œผ๋กœ ๊ฐ๊ฐ์˜ ์ตœ์ ํ•ด์˜ ํ•œ๊ณ„๊ฐ’(bound) ๊ณ„์‚ฐ
    • ํ•œ๊ณ„๊ฐ’์ด ํ˜„ ์ตœ์ ํ•ด๋ณด๋‹ค ์ข‹์ง€ ์•Š๋‹ค๋ฉด ์œ ๋งํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ
    • ์œ ๋งํ•œ ๋…ธ๋“œ ์ค‘์— ํ•œ๊ณ„๊ฐ’์ด ์ตœ๊ณ ์ธ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜์—ฌ ๋ฐฉ๋ฌธ(branch)ํ•˜๋ฉฐ ๋” ์ด์ƒ ์„ ํƒํ•  ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ์„ ํƒ๊ณผ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณต
  • ์ตœ์ ํ•ด๊ฐ€ ์žˆ์„ ํ™•๋ฅ ์ด ๋†’์€ ๋…ธ๋“œ ์ชฝ์œผ๋กœ ๋ฐฉ๋ฌธ์„ ์œ ๋„ํ•˜์—ฌ ๊ฐ€๊ธ‰์  ๋นจ๋ฆฌ ์ตœ์ ํ•ด์— ๋„๋‹ฌํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ ์œ ๋งํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ์˜ ๋น„์œจ์„ ๋†’์ด๋Š” ์ „๋žต์„ ์‚ฌ์šฉ
  • ๋…ธ๋“œ ๋ฐฉ๋ฌธ ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋Š” ๋ฐฑํŠธ๋ž˜ํ‚น๊ณผ ์ฐจ๋ณ„
  • BFS๋Š” ์ผ๋ฐ˜ ํ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์ง€๋งŒ ์ตœ๊ณ  ์šฐ์„  ํƒ์ƒ‰์€ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„
์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.