๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ
๋ฐํ๋ช ๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค
TSP ๋ฌธ์ : ์์ ๊ทธ๋ํ์์ ๊ฐ์ฅ ์งง์ ํด๋ฐํ ๋์ ์ฌ์ดํด ์ฐพ๊ธฐ
๋น๋์นญ TSP ๋ฌธ์ : ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ๋ฐฉํฅ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์๋ TSP ๋ฌธ์
=> ๋ฐฉํฅ๊ทธ๋ํ์ธ๋ฐ ๊ฐ๋ ๋ฐฉํฅ, ์ค๋ ๋ฐฉํฅ์ weight๊ฐ ๋ค๋ฅผ ์ ์๋ TSP ๋ฌธ์
State-Space Tree
์ํ ๊ณต๊ฐ ํธ๋ฆฌ : ๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ์ ์ค๊ฐ ์ํ๋ฅผ ๊ฐ๊ฐ ํ ๋ ธ๋๋ก ๋ํ๋ธ ํธ๋ฆฌ
Backtracking
๋ฐฑํธ๋ํน : ์ํ ๊ณต๊ฐ ํธ๋ฆฌ๋ฅผ ํ์ํ์ฌ ํด๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ
- ํด๊ฐ ์๋ ๊ฒฝ์ฐ ๋๋์๊ฐ๋ค๋ ์๋ฏธ์์ ์ง์ด์ง ์ด๋ฆ
- ๊น์ด ์ฐ์ ํ์ (DFS) ์๊ณ ๋ฆฌ์ฆ์ ์์ฉ
- ์ํ ๊ณต๊ฐ ํธ๋ฆฌ๋ฅผ ๋ช ์์ ์ผ๋ก ๋ง๋ค์ง๋ ์์
Backtracking vs Brute-force
์์น ๋ฌธ์ : k๊ฐ์ ์์์ ์ฌ์ฉํ์ฌ ์ธ์ ํ ์ ์ ์ ๊ฐ์ ์์์ด ์น ํด์ง์ง ์๋๋ก ๊ทธ๋ํ๋ฅผ ์น ํ ์ ์๋๊ฐ?
์์น ๋ฌธ์ ๋ฅผ Brute-force ๋ฐฉ์์ผ๋ก ํผ๋ค๋ฉด?
์์น ํ๋ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ์กฐ์ฌํด์ผํ๋ฏ๋ก ๊ฒฝ์ฐ์ ์๊ฐ k^n์ด ๋จ
Backtracking ๋ฐฉ์์ผ๋ก ํผ๋ค๋ฉด?
์ํ ๊ณต๊ฐ ํธ๋ฆฌ๋ฅผ ํ์ํ๋ ์ค์, ๋ต์ด ๋ ์ ์๋ ๊ฒฝ์ฐ๋ ๋น ๋ฅด๊ฒ ๊ฑธ๋ฌ๋ด๊ธฐ ๊ฐ๋ฅ
Branch-and-Bound
ํ์ ๋ถ๊ธฐ : ์ต์ ์ ํด๊ฐ ๋ ์ ์๋ ๊ฒฝ์ฐ ๊ฐ์ง์น๊ธฐ(Pruning) ํ๋ ๋ฐฉ๋ฒ
=> ๊ฐ ์ํ์ lower bound๊ฐ ์ง๊ธ ์ฐพ์ ํด๋ณด๋ค ๋ ์ข์์ง์ง ์์ผ๋ฉด ๊ฐ์ง์น๊ธฐ
- ์ํ ๊ณต๊ฐ ํธ๋ฆฌ๋ฅผ ํ์ํ ๋, ๊ฐ ์ํ๋ง๋ค ํํ์ ๊ณ์ฐ (์ถ์ ์น)
- ๊ฐ ์ํ์ ์๋ธํธ๋ฆฌ๋ ํํ๋ณด๋ค ๋ ์ข์ ํด๋ฅผ ๊ฐ์ง์ง ์์
- ํํ = g(x) + h(x)
- g(x) : ์ง๊ธ๊น์ง์ ๊ฒฝ๋ก ๊ธธ์ด
- h(x) : ๋จ์ ๊ฒฝ๋ก ๊ธธ์ด์ ์ถ์ ์น
- g(x) : ์ง๊ธ๊น์ง์ ๊ฒฝ๋ก ๊ธธ์ด
- ๋จ์ ๊ฒฝ๋ก ๊ธธ์ด์ ์ถ์ ์น ์กฐ๊ฑด
- ์ค์ ๊ฒฝ๋ก๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผํจ
- ๋จ์กฐ์ฆ๊ฐ ํด์ผํจ h(x) <= w(x, y) + h(y)
- ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ๊ฒฝ์ฐ, ์ต์ ํด๋ฅผ ๊ตฌํ ์ ์์
- ์ค์ ๊ฒฝ๋ก๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผํจ
- ๊ฐ ์ํ์ ์๋ธํธ๋ฆฌ๋ ํํ๋ณด๋ค ๋ ์ข์ ํด๋ฅผ ๊ฐ์ง์ง ์์
Branch and Bound vs Backtracking
Backtracking ๊ฐ์ง์น๊ธฐ : ์ ์ฝ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ๊ฒฝ์ฐ
=> ์์น ๋ฌธ์ ์์ ์ธ์ ํ ์์ด ๊ฐ์ ์์ผ๋ก ์น ํด์ง๋ ๊ฒฝ์ฐ
ํ์ ๋ถ๊ธฐ์ ๊ฐ์ง์น๊ธฐ : ์ต์ ํด๊ฐ ๋ ์ ์๋ ๊ฒฝ์ฐ
=> ์ง๊ธ๊น์ง ์ฐพ์ ํด๋ณด๋ค ๋ ์ข์ ํด๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ
(๋ ๋ง์ ๊ฒฝ์ฐ ๊ฐ์ง์น๊ธฐ๊ฐ ๋ฐ์ํจ!)
Branch and Bound for TSP
TSP ๋ฌธ์ ์์ ํํ ์ค์ : ์ฌ์ฉํ ๊ฐ์ ์ ๊ฐ์ค์น + ๊ฐ ์ ์ ์ ๊ฐ์ฅ ์งง์ out-edge ๊ธธ์ด์ ํฉ
=> cycle์ ๊ฐ ์ ์ ์์ ๋๊ฐ๋ ๊ฐ์ ์ด ์์์ ๋ฐํ์ผ๋ก ์์ํ ๋ ๊ฐ ์ ์ ์์ ๋๊ฐ๋ ์ต์ ๊ฐ์ ๋ค์ ๋ํ 33๋ณด๋ค๋ ๋ฌด์กฐ๊ฑด ์ปค์ผํจ
A* Algorithm
A* ์๊ณ ๋ฆฌ์ฆ : Branch and bound + Best-First-Search
(๋ค์ต์คํธ๋ผ์ฒ๋ผ ์ต์ ์ ์ ํ)
ํ๋ณด๋ค ์ค ํํ์ด ๊ฐ์ฅ ๋ฎ์ ๊ฒ ๋ถํฐ ํ์ํจ
=> ๋ฆฌํ ๋
ธ๋๋ฅผ ํ๋๋ผ๋ ๋ฐฉ๋ฌธํ๋ ์๊ฐ ์๊ณ ๋ฆฌ์ฆ ์ข
๋ฃ
(๊ฐ์ฅ ์ฒ์ ๋ฐฉ๋ฌธํ ๋ฆฌํ ๋
ธ๋๊ฐ ์ต์ ํด์ด๋ฏ๋ก)
๊ฐ ์ ์ ๋ง๋ค ๋์ฐฉ ์ ์ ๊น์ง ์ถ์ ๊ฑฐ๋ฆฌ ์กด์ฌ
(ํํ = ์ง๋์จ ๊ฒฝ๋ก ๊ฑฐ๋ฆฌ + ์ถ์ ๊ฑฐ๋ฆฌ)
=> ํํ์ด ๊ฐ์ฅ ์งง์ ์ ์ ์ ์ฐ์ ์ ์ผ๋ก ๋ฐฉ๋ฌธ
'๐ฅ Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
L16 - NP-Completeness (2) (0) | 2024.12.05 |
---|---|
L16 - NP-Completeness (1) (0) | 2024.12.03 |
L15 - Boyer-Moore Algorithm (0) | 2024.11.30 |
L14 - KMP Algorithm (1) | 2024.11.30 |
L13 - Topological Sorting (0) | 2024.11.29 |