๐ Back Tracking
๐ซ Back Tracking
ํ์ฌ ์ํ์์ ๊ฐ๋ฅํ ๋ชจ๋ ํ๋ณด๊ตฐ์ ๋ฐ๋ผ ๋ค์ด๊ฐ๋ฉฐ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
Like ํ๋ฆฐ์ธ์ค ๋ฉ์ด์ปค, ๋ฏธ์ฐ์, ์ญ์ ์ฌํ, ๊ฒ์๋ฐฉ, ํ์๋์, ๋ฌธ๋ช
๋ฑ ์ ํ์ง๊ฐ ๋๋ ์ง๋ ๊ฒ์์์ ์ธ์ด๋ธ ํ์ผ์ ํตํด ํ์ฌ ์ ํ ์ดํ, ๋ค๋ฅธ ์ ํ์ง๋ ์ ํํด๋ณด๊ณ , ๋ชจ๋ ์ ํ์ง๋ฅผ ๋ค ํ๋ ์ด ํด๋ณด๋ ๋ฐฉ๋ฒ
Like ์ํ๊ณ
์ํ๊ณต๊ฐํธ๋ฆฌ
๋ฐฑํธ๋ํน์ ์ํ๋ฅผ ๋๋๋ ๋ค
์ํ๋ฅผ ๋๋๋ ๊ฐ๋ ๊ฒ์, ์๋ฅผ ๋ค์ด ์ด๋ค ์์ ์ ๋ฆฌ์คํธ์์ ๋ค๋ฅธ ์์ ์ ๋ฆฌ์คํธ๋ก ๋์ด๊ฐ๋ค๋ ๊ฒ
Like ๋ณด๋ฌผ์ฐพ๊ธฐ, ์ด๋๊ฐ ์จ์ด ์๋ ๋ณด๋ฌผ(ํด๋ต)์ ์ฐพ๋ ๊ฒ
๋ณด๋ฌผ์ ์ฐพ์ผ๋ ค๋ฉด ํํธ๊ฐ ์๋ ์ง๋(Map)๊ฐ ์์ด์ผํจ
๋ชจ๋ ๊ณณ์ ๋ค์ ธ๋ด๋ ๋์ง๋ง,
๋ณด๋ค ๋นจ๋ฆฌ, ํจ์ธ์ ์ผ๋ก ์ฐพ์๋ณด์๋ ๊ฒ
๋ณด๋ฌผ์ ์ฐพ์๋ด๋ ์ ๋ต์ด ์ค์ (์ ๋ต์ ๋ฐ๋ผ ๋ฐฑํธ๋ํน์ ํจ์จ์ด)
i.e. ๋ณด๋ฌผ์ด ์์ ๋งํ ๊ณณ๋ง ์ฐพ์๋ณธ๋ค๋์ง (์๋ ๊ณณ์ ํจ์ค)
Backtracking - ๋๋์๊ฐ๋ค
๋๋์๊ฐ๊ฑฐ๋ ๋์ง์ด ๊ฐ๋ ค๋ฉด, ์ด๋ฏธ ์ง๋์จ ๊ธธ์ด ๋น์ฐํ ๋ฐ๋์ ์กด์ฌ
Why, ๋ ์ด์ ์ด ๊ธธ๋ก ๊ฐ ์๊ฐ ์๊ฑฐ๋ (ํ์๊ฐ ์๋), ์ด๋ฏธ ๋ค ๊ฐ๋ณธ ๊ธธ
(์ง๋๊ฐ ๊ธธ์ ๊ธฐ์ต)
So, ๋๋์๊ฐ์ ์๋ก์ด ๊ธธ์ ์ฐพ๊ธฐ ์ํจ
i.e. ๋ฏธ๋ก ์ฐพ๊ธฐ
์ถ๊ตฌ๋ฃฐ ์ฐพ์ ๋๊น์ง ๋ค์ ๋ฐ๋ณต
- ๋ถ๊ธฐ์ ์ด ๋์ฌ ๋๊น์ง ๊ธธ์ ๋ฐ๋ผ ๊ฐ๋ค. ์ด ๋ ์ง๋๊ฐ๋ ๊ธธ์ ํ์
- ๋ถ๊ธฐ์ ์ ๋ง๋๋ฉด ํ ๊ธธ์ ์ ํํ์ฌ ์ญ์ ํ์ํ๋ฉด์ ๊ณ์ ์งํ
๊ธธ์ด ๋งํ ์์ผ๋ฉด ์ง์ ๋ถ๊ธฐ์ ์ผ๋ก ๋๋์๊ฐ
- ์๋ํ์ง ์์ ๋ค๋ฅธ ๊ธธ์ ์ ํํ์ฌ 1 ์์
๋ชจ๋ ๊ธธ์ ์๋ํ์๋ค๋ฉด ์ง์ ๋ถ๊ธฐ์ ๊น์ง ๋๋์๊ฐ๊ณ , 4 ์์
๋ฐฑํธ๋ํน์ ์ด๋ค ์ผ์ ํ ์ดํ์ ๊ทธ ์ผ์ ๋๋ฌผ๋ฆฌ๋(Undo, ์๋ ์ผ๋ก) ๊ฒ๊น์ง ํฌํจ
i.e. ๊น์ด์ฐ์ ํ์ DFS
๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ ๊ธฐ๋ก, ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์์ ๋
ธ๋๋ค์ ๋ํด ๋ค์ DFS
๋ ์ด์ ๋ฐฉ๋ฌธํ ์์ ๋
ธ๋๊ฐ ์์ผ๋ฉด, ๋ถ๋ชจ ๋
ธ๋๋ก ๋์๊ฐ (Backtracking)
์ง๋
๊ฒฐ๋ก ์ ์ผ๋ก ๋ชจ๋ ์ง๋๋ Tree๋ก ๋ํ๋, Tree๋ฅผ ๋ฐ๋ผ๋ค๋๋ฉฐ ํด๊ฒฐ
Tree๋ฅผ ๊ตฌ์ฑํ๋ ๋
ธ๋๋ค์, ์ํ
๐ซง ํต์ฌ
- ํธ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ๋ง๋ค๊ฑฐ๋/๋ชจ๋ธ๋ง ํ ๊ฑฐ๋
- ์ ๋ต์ ์ธ์ฐ๋ ์ผ (์ ์ฒด ํธ๋ฆฌ ์ค์ ์ ๋ฐฉ๋ฌธํด๋ ๋๋ ์๋ธํธ๋ฆฌ/๋ ธ๋ ๋ฐ๊ตด)
DFS๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ์ง์ ์๊ฐ ์ด์์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ธฐ๋ฒ
- DFS์ ์ฐจ๋ณ๋๋ ๊ฑฐ์ ์ ์ผํ ํน์ฑ์ ๊ฐ์ง์น๊ธฐ
- ๊ฐ์ง์น๊ธฐ๊ฐ ๊ฑฐ์ ์ด๋ฃจ์ด์ง์ง ์์ผ๋ฉด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ค ํ์ธํด์ผ ํ๋ ๋ฌด์์ ๊ธฐ๋ฒ๊ณผ ์ ์ฌ
- ๊ฐ์ง์น๊ธฐ๊ฐ ์ผ์ด๋๋ ๋ ธ๋๊ฐ ๋จ๋ง ๋ ธ๋์ ๊ฐ๊น์ธ์๋ก ํจ๊ณผ๊ฐ ์์. But ๋ฃจํธ ๋ ธ๋์์ ๊ฐ๊น์ด ๋ ธ๋ ์์ ๊ฐ์ง์น๊ธฐ๋ ์ ๋ฐ์ํ์ง ์์
- ์๋์ ์ผ๋ก ๋ง์ ์ ๋ณด๊ฐ ์ถ์ ๋ ๋จ๋ง ๋ ธ๋ ์ชฝ์์ ๋ฐ์ํ ํ๋ฅ ์ด ๋์
๐ซ ์ํ State
์ํ State
์์ํด์ ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ณผ์ ์ค์ ํน์ ์๊ฐ, ์ค๋
์ท์ ์ํ๋ก (๋ฌผ๋ก ์๋ฏธ์๊ฒ ๊ตฌ๋ถ๋๋ ์๊ฐ)
i.e. ๋ฐ๋/์ฒด์ค/์ค๋ชฉ/ํฑํํ ๋ฑ ํด์ ๋ณด๋ ๊ฒ์ : ์ด๋ค ํ ์๊ฐ์ ๋ฐ๋ํ/์ฒด์คํ/ํ ๋ชจ์ต
i.e. 0-1 ๋ฐฐ๋ญ ๋ฌธ์ : ์ด๋ค ํ ์๊ฐ์ ๋ฐฐ๋ญ ๋ชจ์ต (์ด๋ค ๋ฌผ๊ฑด์ด ๋ค์ด์๊ณ ์ด ๋ฌด๊ฒ์ ์ด์ต์ ์ผ๋ง์ธ๊ฐ)
- ์์ ์ํ์์ ์ถ๋ฐ
- i.e. ์ค๋ชฉ : ๋น ๋ฐ๋ํ
- i.e. 0-1 ๋ฐฐ๋ญ ๋ฌธ์ : ๋น ๋ฐฐ๋ญ
- ์ฃผ์ด์ง ๊ท์น์ ๋ฐ๋ผ ์ํ๋ฅผ ๊ณ์ํด์ ๋ณํ
- i.e. ์ค๋ชฉ : ์์์ ๋ง๊ฒ ๋์ ๋ ๋๋ง๋ค (์ํ๊ฐ ๋ณํ)
- i.e. 0-1 ๋ฐฐ๋ญ ๋ฌธ์ : ํด๋น ๋ฌผ๊ฑด์ ์ง์ด๋ฃ๊ฑฐ๋ ์ง์ด๋ฃ์ง ์๊ฑฐ๋๋ฅผ ๊ฒฐ์ ํ ๋๋ง๋ค (์ํ๊ฐ ๋ณํ)
- ์ต์ข
์ํ
- i.e. ์ค๋ชฉ : ๋๊ฐ ์น๋ฆฌํ ์ํ
- i.e. 0-1 ๋ฐฐ๋ญ ๋ฌธ์ : ๋ชจ๋ ๋ฌผ๊ฑด์ ๋ํ ๊ฒฐ์ ์ด ๋๋ ์ํ
- ์ํ๋ ํด๋ต์ธ ์ต์ข
์ํ์ผ ์๋ ์๊ณ , ํด๋ต์ด ์๋ ์ต์ข
์ํ๋ ๊ฐ๋ฅ
- 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 ์ ๋ฌด
- Pruning ๊ฐ์ง์น๊ธฐ : ์ ๋งํ์ง ์์ ๋ ธ๋ ๊ฑธ๋ฌ๋ด๊ธฐ
- ์ ๋งํ ๋ ธ๋์ ๋ํด์๋ง ์ํํธ์ถ(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);
}
๐ซง ๊ทธ ์ธ ์ ๋ต
๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ์ค์ด๊ธฐ ์ํด ์ํ ํจ์๋ฅผ ํธ์ถํ ๋ ๊ฐ์ด ๋ณํ๋ ๋ณ์๋ง ํ๋ผ๋ฏธํฐ๋ก ๋๊ธฐ๊ณ ์ํํธ์ถ์์ ๋ณํ์ง ์๋ ๋ณ์๋ ์ ์ญ ๋ณ์๋ก ์ ์ธ
ํธ๋ฆฌ
- ๋ง๋๋ ๊ณผ์ ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฐ๋ค. (์ด์งํธ๋ฆฌ์ผ๋, 2^n)
- ๋๋ฌด ํฌ๋ค (๋ฉ๋ชจ๋ฆฌ ๋ญ๋น)
- 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๋ ์ผ๋ฐ ํ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ์ง๋ง ์ต๊ณ ์ฐ์ ํ์์ ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ