Backtracking
2020-1ํ๊ธฐ, ๋ํ์์ โ์๊ณ ๋ฆฌ์ฆโ ์์ ์ ๋ฃ๊ณ ๊ณต๋ถํ ๋ฐ๋ฅผ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ์ง์ ์ ์ธ์ ๋ ํ์์ ๋๋ค :)
DFS ํธ๋ฆฌ ํ์์ ์๊ฐํด๋ณด์. ๋ง์ฝ ํ์ฌ ๋ฐฉ๋ฌธํ ๋ ธ๋์์ ์์ผ๋ก ๋ ํ์ํด๋ ์ํ๋ ์ต์ ํด๊ฐ ๋์ค์ง ์์ ๊ฒ ๊ฐ๋ค๋ฉด, ๋ ๊น์ด ๋ฐฉ๋ฌธํ ํ์๊ฐ ์๋ค! ๊ทธ๋์ ํด๋น ๋ ธ๋์์ ๋ ํ์ฅํ์ง ์๊ณ , ๋ค์ ๋ ธ๋๋ก ๋์ด๊ฐ๋ ํ์ ๊ธฐ๋ฒ์ด ๋ฐ๋ก <Backtracking>์ด๋ค.
์ด๋ค ๋ ธ๋์์ ๋ฉ์ถ๋ ํ์๋ฅผ <pruning; ๊ฐ์ง์น๊ธฐ>๋ผ๊ณ ํ๋๋ฐ, ์ด๋ฅผ ํตํด ํ์ ํ Search Space๋ฅผ ์ค์ฌ ํ์์ ๋๋ ๋น์ฉ์ ์ค์ผ ์ ์๋ค!
๋ณดํต <N-queen> ๋ฌธ์ ๊ฐ <Backtracking> ๊ธฐ๋ฒ์ ์ฐ๋ ๋ํ์ ์ธ ๋ฌธ์ ๋ค. ๊ทธ๋ฌ๋ ์์ ์์ ์ ๋ค๋ค์ผ๋ ๋์ด๊ฐ๊ณ , ๋์ <SAT> ๋ฌธ์ ๋ฅผ <Backtracking>์ผ๋ก ํ์ด๋ณด์.
SAT with Backtracking
6๊ฐ์ clause์ 4๊ฐ์ variable์ด ์๋ ์๋์ SAT ๋ฌธ์ ๋ฅผ ์ดํด๋ณด์.
\[\phi(w, x, y, z) = (w \lor x \lor y \lor z) (w \lor \bar{x}) (x \lor \bar{y}) (y \lor \bar{z}) (z \lor \bar{w}) (\bar{w} \lor \bar{z})\]์ formula์ $(w \lor \bar{x})$ clause๋ฅผ ํตํด $w = 0, x = 1$์ด ์กด์ฌํ๋ assignment๋ ๋ชจ๋ pruning ํ ์ ์๋ค. ์ฆ, not-satisfying partial assignment๋ฅผ ํตํด ํ์ํด์ผ ํ๋ Search Space๋ฅผ ์ค์ฌ๋๊ฐ ์ ์๋ค.
๊ทธ๋ฌ๋ ๋ค๋ฅธ partial assignment์ธ $w = 0, x = 0$๋ก ํ์์ ๊ณ์ํด๋ satisfying assignment๋ ์ฐพ์ ์ ์๋ค.
<SAT> ๋ฌธ์ ๋ฅผ Backtracking์ผ๋ก ํด๊ฒฐํ๋ ค ํ ๋ ์๊ฐํ ๋ถ๋ถ์ด ํ๋ ๋ ์๋ค. ์ฐ๋ฆฌ๋ ๋ค์ ์คํ ์์ ์ด๋ค variable์ ์ฒดํฌํด partial assn์ ํ์ฅํ ๊ฒ์ธ๊ฐ? ์ฝ์ง ์์ ๋ฌธ์ ์ด์ง๋ง, Greedy ํ๊ฒ ์๊ฐํด๋ณด๋ฉด ์๋์ ๊ฐ์ ๊ท์น์ด ๊ฐ๋ฅํ๋ค.
โChoose the subproblem that contains the smallest clause, and then branch on a variable in that clause.โ
SAT ๋ฌธ์ ์์ ๊ฐ์ฅ ์์ clause๋ผ ํ๋ฉด $(z)$์ ๊ฐ์ singleton clause์ด๋ค. singleton clause์ ๊ฒฝ์ฐ, assn T/F ์ค ํ๋๋ ๋ฌด์กฐ๊ฑด non-satisfying์ด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฐ <Backtracking> ์๊ณ ๋ฆฌ์ฆ์ ์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ๋ค.
Start with some problem $P_0$
Let $S = \{ P_0 \}$, the set of active subproblems.
while $S$ is non-empty:
ย ย choose a subproblem $P \in S$ and remove it from $S$.
ย ย expand it into smaller subproblems $P_1, P_2, \dots, P_k$
ย ย for each $P_i$:
ย ย ย ย if $\text{test}(P_i)$ succeed: halt and report it as a solution.
ย ย ย ย if $\text{test}(P_i)$ succeed: halt and report it as a solution.
ย ย ย ย otherwise: add $P_i$ to $S$.
Announce that there is no solution.
<Backtracking>์ ํต์ฌ์ ๊ฐ๋ง์ด ์๋ subproblem์ ์ง์๋ฒ๋ฆฌ๋ ๊ฒ์ ๋ฐฉ์์ด๋ค. ์ด๋ฅผ ํตํด Search Space๋ฅผ ์ค์ฌ Exponential Time์ด ๊ฑธ๋ฆด ํ์์ ํ๊ธฐ์ ์ผ๋ก ์ค์ผ ์ ์๋ค! ๊ทธ๋ฌ๋ ๋ฌธ์ ์ ์ด๋ค instance๊ฐ ๋์ค๋๋์ ๋ฐ๋ผ, ๋๋ partial solution์ ์ด๋ป๊ฒ ํ์ฅํ ๊ฑด์ง์ ๋ฐ๋ผ ๊ณ์ฐ ์๋๊ฐ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ input $N$์ด ๋๋ฌด ํฌ๋ค๋ฉด, ์ฌ์ฉํ๊ธฐ ์ ์ ํ์ง ์์ ์ ์๋ค.
๋ค์ ํฌ์คํธ์์ <Backtracking> ์๊ณ ๋ฆฌ์ฆ์ ํ์๊ฒฉ์ธ <Branch-and-Bound> ์๊ณ ๋ฆฌ์ฆ์ ์ดํด๋ณธ๋ค ๐
๐ Branch and Bound