๐น DFS(Depth-First Search)
- ๊น์ด ์ฐ์ ํ์ DFS๋ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ๋ก(ํ๋ณด)๋ฅผ ํ์ํ๋ค. ๋ฐ๋ผ์, ๋ถํ์ํ ๊ฒ ๊ฐ์ ๊ฒฝ๋ก๋ฅผ ์ฌ์ ์ ์ฐจ๋จํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ต์ ์ผ๋ก ์ค์ด์ง ๋ชปํ๋ค.
- ๋ฐ๋ผ์, N! ์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ฐ์ง๋ ๋ฌธ์ ๋ DFS๋ก ์ฒ๋ฆฌํ์ง ๋ชปํ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ํฌ๋ค.
๐น ๋ฐฑํธ๋ํน(Back-Tracking) ?
- ํด๋ฅผ ์ฐพ๋ ๋์ค์ ๋งํ๋ฉด ๋ ์ด์ ๊น์ด ๋ค์ด๊ฐ์ง ์๊ณ , ์ด์ ๋จ๊ณ๋ก ๋๋์๊ฐ์ ํด๋ฅผ ์ฐพ์๊ฐ๋ ๊ธฐ๋ฒ
- ํด๋ฅผ ์ฐพ์๊ฐ๋ ๋์ค์ ์ง๊ธ์ ๊ฒฝ๋ก๊ฐ ํด๊ฐ ๋ ๊ฒ ๊ฐ์ง ์๋ค๋ฉด, ๋ ์ด์ ๊น์ด ๋ค์ด๊ฐ์ง ์๊ณ ์ด์ ๋จ๊ณ๋ก ๋์๊ฐ๋ค.
- ์ด๋ฅผ ๊ฐ์ง์น๊ธฐ๋ผ๊ณ ํ๋๋ฐ, ๋ถํ์ํ ๋ถ๋ถ์ ์ณ๋ด๊ณ ์ต๋ํ ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ๊ฒฝ์ฐ์ ์๊ฐ ์ค์ด๋ค์ง๋ง,
- ๋ง์ฝ N! ์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ฐ์ง ๋ฌธ์ ์์๋ ์ต์ ์ ๊ฒฝ์ฐ ์ฌ์ ํ DFS(Depth-First Search)์ ๊ฐ์ ์๊ฐ์ ํ์๋ก ํ๋ฏ๋ก ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ ์๋ ์๊ณ ๊ฐ๋ฅํ ์๋ ์๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ๊ฐ์ง์น๊ธฐ๋ฅผ ์ผ๋ง๋ ์ํ๋๋์ ๋ฐ๋ผ์ ํจ์จ์ฑ์ด ๊ฒฐ์ ๋๋ค.
๐น ์์๋๋ฉด ์ข์ ๋ฐฑํธ๋ํน ์ฉ์ด
- Promising : ํด๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ ๋ง(promising) ํ ์ํ
- Pruning : ํด๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฒฝ์ฐ, ํด๋น ๋ ธ๋๋ฅผ ์ ์ธํ๋ ํ์
- Backtracking : ์ ๋งํ์ง ์์ ๋ฐฉํฅ์ผ๋ก ๋ ์ด์ ์งํํ์ง ์๊ณ ๋๋์(backtracking) ์ค๋ ํ์
๐น ๋ฐฑํธ๋ํน์ ์ ๋ง์ฑ ํ๋จ
- ์ด๋ค ๋ ธ๋์ ์ ๋ง์ฑ, ์ฆ ํด๊ฐ ๋ ๋งํ์ง ํ๋จํ ํ์ ์ ๋งํ์ง ์๋ค๊ณ ๊ฒฐ์ ๋๋ฉด, ๊ทธ ๋ ธ๋์ ์ด์ ๋ ธ๋(๋ถ๋ชจ)๋ก ๋์๊ฐ (backtracking) ๋ค์ ์์ ๋ ธ๋๋ก ์ด๋ํ๋ค.
- ํด๊ฐ ๋ ๋งํ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด ์ ๋งํ๋ค(promising)๊ณ ํ๋ฉฐ, ์ ๋งํ์ง ์์ ๋ ธ๋์ ๊ฐ์ง ์๋ ๊ฒ์ ๊ฐ์ง์น๊ธฐ(pruning)๋ผ๊ณ ํ๋ค.
๐น ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น ?
- ์ผ์ ํ ํฌ๊ธฐ์ ์กฐ๊ฑด๋ค์ด ์ฃผ์ด์ง๊ณ , ๊ทธ ์์์ ์์ ํ์์ ํตํด ์ต์ ๋น์ฉ ๋๋ ์ต์ ๊ฒฝ๋ก๋ฅผ ํ์ํด์ผ ํ๋ ๊ฒฝ์ฐ
- ๊ฐ ์กฐ๊ฑด์์ ์ ํํ ์ ์๋ ๊ฒฝ์ฐ์ ์๊ฐ ์ ํด์ ธ ์์ ๊ฒฝ์ฐ
๐ reference
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Deque (๋ฑ/๋ฐํฌ) (1) | 2024.07.19 |
---|---|
๋นํธ๋ง์คํฌ (BitMask) (0) | 2024.07.15 |
์์์ ๋ ฌ(Topological Sorting) ์๊ณ ๋ฆฌ์ฆ (0) | 2024.01.12 |
๋ถ๋ถ์งํฉ(Subset) (4) | 2023.10.31 |
์ ๋์จ ํ์ธ๋(Union-Find) ์๊ณ ๋ฆฌ์ฆ (0) | 2023.09.07 |