Bounding/Promising Fn
- ๐
g + hcompareBEST- g: ํ์ฌ๊น์ง ๊ณ์ฐ๋ ๊ฐ, ๋ช ํ
- h: heuristic, ์ถ์ ์น
H-value = ์์ธก๊ฐ
0 < h < โ- โญ ๋ณด์์ = ์ค์ ๊ฐ๋ฅ์ฑ 0 = ์ ๋ต ๋ณด์ฅ
- ์ต๋๊ฐ ๊ตฌํ ๋ = Overestimate +
BESTinit 00 < h* < h < โg + h(์ต๋ํ ํฌ๊ฒ) < BEST์ผ ๋ ๊ฐ์ง์น๊ธฐ- ๊ณผ์ฅํด์ ์์ธกํ๋๋ฐ๋
BEST๋ณด๋ค ์๋ค? = ์ ๋ ์ต๋๊ฐ X = ๋ณผ ๊ฐ์น X
- ๊ณผ์ฅํด์ ์์ธกํ๋๋ฐ๋
- ์ต์๊ฐ = Underestimate +
BESTinit โ0 < h < h* < โg + h(์ต๋ํ ์๊ฒ) > BEST์ผ ๋ ๊ฐ์ง์น๊ธฐ
- ์ต๋๊ฐ ๊ตฌํ ๋ = Overestimate +
ํน์ง
- 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)
- DFS = Backtracking vs BFS = Branch and Bound
์ํฉ
์ํฉ๊ณผ ๋์ผ
๋น๊ต
| Backtracking | Branch and Bound | B&B with Best-First | |
|---|---|---|---|
| ์ ์ | DFS + bounding fn | BFS + bounding fn | B&B + greedy |
| fn๊ฐ์ด ๊ฐ์ฅ ์ต์ ์ธ node ์ ํ + children ํ์ธ ๐ | |||
| ํน์ง | ํ ๋ฒ์ depth๋ฅผ ๊น์ด ํ๊ณ ๋ฆ = g๊ฐ์ด ๋นจ๋ฆฌ ๊ฐฑ์ ๋จ = h๊ฐ์ ๋ถํ์ค์ฑ ๋น ๋ฅด๊ฒ ๊ฐ์ | root ๊ทผ์ฒ์์ ๋น ๋ฅด๊ฒ ๊ฐ์ง์น๊ธฐ ๊ฐ๋ฅ | |
| ๊ตฌํ | node ์ ํ์ ์ฐ์ ์์ ํ(ํ) ํ์ฉ | ||
| ์ํฉ | h ์์ธก์ด ์ด๋ ค์ธ ๋ = ์ฐ๊ตฌ | h ์์ธก์ด ์ ํํ ๋ = ์ต์ํ, ๋น์ฐํ ๋ฌธ์ |