Algorithm

Bounding/Promising Fn

  • ๐Ÿ“Œ g + h compare BEST
    • g: ํ˜„์žฌ๊นŒ์ง€ ๊ณ„์‚ฐ๋œ ๊ฐ’, ๋ช…ํ™•
    • h: heuristic, ์ถ”์ •์น˜

H-value = ์˜ˆ์ธก๊ฐ’

  1. 0 < h < โˆž
  2. โญ ๋ณด์ˆ˜์  = ์‹ค์ˆ˜ ๊ฐ€๋Šฅ์„ฑ 0 = ์ •๋‹ต ๋ณด์žฅ
    1. ์ตœ๋Œ“๊ฐ’ ๊ตฌํ•  ๋•Œ = Overestimate + BEST init 0
      • 0 < h* < h < โˆž
      • g + h(์ตœ๋Œ€ํ•œ ํฌ๊ฒŒ) < BEST์ผ ๋•Œ ๊ฐ€์ง€์น˜๊ธฐ
        • ๊ณผ์žฅํ•ด์„œ ์˜ˆ์ธกํ–ˆ๋Š”๋ฐ๋„ BEST๋ณด๋‹ค ์ž‘๋‹ค? = ์ ˆ๋Œ€ ์ตœ๋Œ“๊ฐ’ X = ๋ณผ ๊ฐ€์น˜ X
    2. ์ตœ์†Ÿ๊ฐ’ = Underestimate + BEST init โˆž
      • 0 < h < h* < โˆž
      • g + h(์ตœ๋Œ€ํ•œ ์ž‘๊ฒŒ) > BEST์ผ ๋•Œ ๊ฐ€์ง€์น˜๊ธฐ

ํŠน์ง•

  • Brute Force + Bounding/Promising fn
    • T(n) = ์ƒํƒœ๊ณต๊ฐ„/ํƒ์ƒ‰๊ณต๊ฐ„ tree = BF tree์™€ ๋™์ผ
    • exp T.C
    • ํ•ญ์ƒ optimal != efficient
    • โš ๏ธ visited๋Š” promising์˜ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜์ผ ๋ฟ, ์ด๋ฅผ ํ™•์žฅ์‹œ์ผœ ๋‹ค๋ฅธ ์กฐ๊ฑด์— ์–ด๊ธ‹๋‚˜๋Š”์ง€ ๋น„๊ตํ•˜๊ฑฐ๋‚˜ ์ง€๊ธˆ๊นŒ์ง€์˜ ์ตœ์ ๊ฐ’๊ณผ ๋น„๊ตํ•˜์—ฌ pruning ๊ฐ€๋Šฅ
      • if(visited[node]) ๋Œ€์‹  if(promising(value1, ...)) ์ฒ˜๋Ÿผ ๊ตฌํ˜„ํ•œ ๋’ค, promising ํ•จ์ˆ˜ ๋”ฐ๋กœ ๋–ผ ๊ตฌํ˜„
        • promising ๋กœ์ง์—์„œ ๊ณ„์‚ฐํ• ์ง€, bounding์— ์“ธ ๊ฐ’์„ ๋ฏธ๋ฆฌ ๊ธฐ๋กํ•ด๋‘˜์ง€๋Š” ์„ ํƒ ์‚ฌํ•ญ
      • DFS, Backtracking โžก๏ธ ์žฌ๊ท€ ํ˜ธ์ถœ ์ „ bounding์— ์“ฐ์ด๋Š” ๊ฐ’์„ ์„ธํŒ…ํ•˜๊ณ , ํ˜ธ์ถœ ํ›„ (๊ฐ’์ด ๋ฎ์–ด์“ฐ์—ฌ์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ) ๊ฐ’ ๋ณต์›
        • ์žฌ๊ท€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ํ•œ ๋ฒˆ = ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ์˜ node ํ•˜๋‚˜
        • ๊ฐ์ฒด๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ, ๊ทธ๋ƒฅ ์žฌ๊ท€ ํ•จ์ˆ˜์— ๊ฐ’์œผ๋กœ ๋„˜๊ฒจ์ฃผ๋ฉด ๋จ (๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ์ฒ˜๋Ÿผ)
      • BFS โžก๏ธ ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ์˜ ํ•œ ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ์„ ์–ธํ•˜์—ฌ queue์— push, ๋ฐฐ์—ด ๋˜๋Š” ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ๋กœ bounding์— ์“ฐ์ด๋Š” ๊ฐ’ ์„ธํŒ…
        • bounding์— ์“ฐ์ด๋Š” ๊ฐ’์ด ๋ฐฐ์—ด์ผ ๊ฒฝ์šฐ ๋ณต์‚ฌ๋ณธ ์ „๋‹ฌํ•ด์•ผ ํ•จ
  • ์ด๋ก ์  T.C๊ฐ€ ์•„๋‹Œ ์‹ค์ œ runtime ๊ฐœ์„ 
    • โญ ์–ผ๋งˆ๋‚˜ ๊ฐ€์ง€์น˜๊ธฐ ๋˜๋Š”์ง€? (by Bounding/Promising fn)
    • Performance gain = # ํƒ์ƒ‰ node / # ์ „์ฒด node
    • Tree Design โžก๏ธ ๊นŠ์ด vs ๋„“์ด (Branch Factor)

์ƒํ™ฉ

์ƒํ™ฉ๊ณผ ๋™์ผ

๋น„๊ต

BacktrackingBranch and BoundB&B with Best-First
์ •์˜DFS + bounding fnBFS + bounding fnB&B + greedy
fn๊ฐ’์ด ๊ฐ€์žฅ ์ตœ์ ์ธ node ์„ ํƒ
+ children ํ™•์ธ ๐Ÿ”
ํŠน์ง•ํ•œ ๋ฒˆ์— depth๋ฅผ ๊นŠ์ด ํŒŒ๊ณ ๋“ฆ
= g๊ฐ’์ด ๋นจ๋ฆฌ ๊ฐฑ์‹ ๋จ
= h๊ฐ’์˜ ๋ถˆํ™•์‹ค์„ฑ ๋น ๋ฅด๊ฒŒ ๊ฐ์†Œ
root ๊ทผ์ฒ˜์—์„œ ๋น ๋ฅด๊ฒŒ
๊ฐ€์ง€์น˜๊ธฐ ๊ฐ€๋Šฅ
๊ตฌํ˜„node ์„ ํƒ์— ์šฐ์„ ์ˆœ์œ„ ํ(ํž™) ํ™œ์šฉ
์ƒํ™ฉh ์˜ˆ์ธก์ด ์–ด๋ ค์šธ ๋•Œ
= ์—ฐ๊ตฌ
h ์˜ˆ์ธก์ด ์ •ํ™•ํ•  ๋•Œ
= ์ต์ˆ™ํ•œ, ๋‹น์—ฐํ•œ ๋ฌธ์ œ