์ง๊ธ๊น์ง ๋ค๋ฃฌ ๋์ ๊ณํ๋ฒ์ด๋ ๋ถํ ์ ๋ณต ๋ฑ์ ๋์์ธ ํจ๋ฌ๋ค์์ ์ ์ ํ ์ ์ฉ๋ ๋๋ ๋งค์ฐ ์ ์ฉํ์ง๋ง, ๋ชจ๋ ๋ฌธ์ ์ ์ ์ฉํ ์๋ ์๋ค.
์ ์ ํ ๋ถํ ๋ฐฉ๋ฒ์ด ์๋ ๋ฌธ์ ๋ฅผ ๋ถํ ์ ๋ณต์ผ๋ก ํ ์๋ ์๊ณ , ์ค๋ณต๋๋ ๋ถ๋ถ ๋ฌธ์ ๊ฐ ์ ํ ์๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋ฌด ๋ง์ด ์ฌ์ฉํ๋ ๋ฌธ์ ์ ๋์ ๊ณํ๋ฒ์ ์ธ ์๋ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์ ์ฐ๋ฆฌ๋ ๊ฒฐ๊ตญ ์์์ ์ธ ์์ ํ์์ผ๋ก ๋์์ ๋ค์ ์์ํด์ผ ํ๋ค.
์์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๋๊ฐ ๋ต์ ๋ง๋๋ ๊ณผ์ ์ ์ฌ๋ฌ ๊ฐ์ ์ ํ์ผ๋ก ๋๋ ๋ค, ์ฌ๊ท ํธ์ถ์ ์ด์ฉํด ๊ฐ๊ฐ์ ์ ํ์ง๋ฅผ ์ฑ์๊ฐ๋ ํํ๋ก ๊ตฌํ๋๊ณค ํ๋ค. ์ด๋ ๋ถ๋ถ ๋ต๊ณผ ์์ฑ๋ ๋ต์ ์งํฉ์ ํ์ ๊ณต๊ฐ(search space)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์๋ฅผ ๋ค๋ฉด ์ฌํํ๋ ์ธํ์ ๋ฌธ์ (TSP)์์ ํ์ ๊ณต๊ฐ์ ํ ์์๋ ์ง๊ธ๊น์ง ๋ฐฉ๋ฌธํ ์ ์ ์ ๋ชฉ๋ก๊ณผ ํ์ฌ ์์น๋ก ๊ตฌ์ฑํ๋ค.
์์ ํ์์ ๋ชจ๋ ๋ต์ ๋ค ๋ง๋ค์ด ๋ณด๋ฉด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฏ๋ก, ์์ ํ์์ ์ํ ์๊ฐ์ ํ์ ๊ณต๊ฐ์ ํฌ๊ธฐ์ ์ง์ ์ ์ผ๋ก ๋น๋ก. ๊ทธ๋ฐ๋ฐ ๋๋ถ๋ถ์ ๋ฌธ์ ์์ ํ์ ๊ณต๊ฐ์ ํฌ๊ธฐ๋ ๋ฌธ์ ์ ๊ท๋ชจ์ ๋ฐ๋ผ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐ. ์๋ฅผ ๋ค์ด ๋ฌธ์ ๋ฅผ n๊ฐ์ ์ ํ์ง๋ก ์กฐ๊ฐ๋๋๋ฐ, ๊ฐ ์ ํ์ง๋ง๋ค ์ธ ๊ฐ์ง์ ์ ํ์ ํ ์ ์๋ค๊ณ ๊ฐ์ ํ์๋, ํ์ ๊ณต๊ฐ์ ํฌ๊ธฐ๋ ๋ฌธ์ ์ ํฌ๊ธฐ๊ฐ 1 ์ปค์ง ๋๋ง๋ค ์ธ ๋ฐฐ๋ก ์ฆ๊ฐํ๊ฒ ๋๋ค.
์๋ ๊ทธ๋ฆผ ์ ํ์ ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ํ์ธํด์ผ ํ ํ์ ๊ณต๊ฐ์ ์์๊ฐ ๊ธ๊ฒฉํ ๋์ด๋จ์ ๋ณด์ฌ์ค๋ค. ๋ฐ๋ผ์ ์์ ํ์์ ๋ฌธ์ ์ ๊ท๋ชจ๊ฐ ์กฐ๊ธ์ด๋ผ๋ ํด ๊ฒฝ์ฐ ์ฌ์ฉํ๊ธฐ ์ด๋ ต๋ค๋ ๋ฌธ์ ์ ์ด ์กด์ฌ.
์์ ํ์์ ํฌํจํด ํฌ๊ธฐ๊ฐ ์ ํํ ํ์ ๊ณต๊ฐ์ ๋ค์ง๋ฉด์ ๋ต์ ์ฐพ์๋ด๋ ์๊ณ ๋ฆฌ์ฆ๋ค์ ์ด ์ฑ ์์๋ ์กฐํฉ ํ์(combinatorial search)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์กฐํฉ ํ์์๋ ๋ค์ํ ์ต์ ํ ๊ธฐ๋ฒ์ด ์์ผ๋ฉฐ, ์ด๋ค์ ์ ๊ทผ ๋ฐฉ๋ฒ์ ๋ค๋ฅด์ง๋ง ๋ชจ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์ต์ ํด๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ๋ต๋ค์ ํ์ํ๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ ๋ง๋ค์ด ๋ด์ผ ํ ๋ต์ ์๋ฅผ ์ค์ด๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ค.
์กฐํฉ ํ์์ ์ต์ ํํ๊ธฐ ์ํด ์ด๋ค ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํ ์ง ์ฐพ์๋ด๋ ๊ฒ์ ๋ฌธ์ ์์ฒด์ ๋ํ ๊น์ ์๊ฒฌ์ ์๊ตฌํ๋ฉฐ, ์๋์ ์ ํ๋ ์ฌ์ด์ ์์ถฉ ๊ด๊ณ, ๋ค์ํ ์ ๋ ฅ ํํ ์ฌ์ด์ ์์ถฉ ๊ด๊ณ ๋ฑ์ ๋ชจ๋ ๊ณ ๋ คํด์ผ ํ๋ค. ์ด๋ ๊ฒ ์ด๋ ค์ด ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ์กฐํฉ ํ์์๋ ๋ฑํ ์ ๋ต์ด ์๋ค
์กฐํฉ ํ์ ์ต์ ํ ๊ธฐ๋ฒ๋ค์ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋ถ๋ฅํ๋ค.
ํ์ ๊ณผ์ ์์ ์ต์ ํด๋ก ์ฐ๊ฒฐ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ๋ถ๋ถ๋ค์ ์๋ผ๋ธ๋ค. ํ์ฌ ์ํ์์ ๋ต์ ๋๋จธ์ง๋ฅผ ์์ฑํ์ ๋ ์ป์ ์ ์๋ ๊ฐ์ฅ ์ข์ ๋ต์ด ์ง๊ธ๊น์ง ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ์ต์ ํด๋ณด๋ค ๋์๋ค๋ฉด ํ์์ ๋ ํ ํ์๊ฐ ์๋ค. ๊ฐ์ง์น๊ธฐ์ ๊ฐ์ฅ ๊ธฐ์ด์ ์ธ ์๋ก, ์ง๊ธ๊น์ง ์ฐพ์๋ธ ์ต์ ํด ๋ณด๋ค ๋ถ๋ถํด๊ฐ ์ด๋ฏธ ๋ ๋๋น ์ก๋ค๋ฉด ํ์ฌ ์ํ๋ฅผ ๋ง์ ํ์ํ์ง ์๊ณ ์ข ๋ฃํด๋ฒ๋ฆฌ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ์ธํ์ ๋ฌธ์ ๋ฅผ ํธ๋๋ฐ, ๊ธธ์ด๊ฐ 10์ธ ๊ฒฝ๋ก๋ฅผ ์ด๋ฏธ ์ฐพ์๋๋ค๊ณ ํ ๋, ์ฌ๊ท ํธ์ถ ๋์ค ํ์ฌ๊น์ง ๋ง๋ ๋ถ๋ถ ๊ฒฝ๋ก์ ๊ธธ์ด๊ฐ ์ด๋ฏธ 10 ์ด์์ด ๋ ์๋ค๋ฉด ๋ ์ด์ ํ์ํ์ง ์๊ณ ํ์์ ์ค๋จํด๋ ๋๋ค. ๋๋จธ์ง ๊ฒฝ๋ก๋ฅผ ๋ง๋ค์ด๋ด์ผ 10๋ณด๋ค ์งง์ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ. ๊ฐ์ง์น๊ธฐ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ฉด ์กด์ฌํ๋ ๋ต ์ค์ ์ผ๋ถ๋ ์์ ๋ง๋ค์ง ์๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ์ ๋์ ์๋๊ฐ ๋นจ๋ผ์ง๋ค. ๋๋ํ ๊ฐ์ง์น๊ธฐ ๊ธฐ๋ฒ๋ค์ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ ์ด์ฉํด ํ์ฌ ์ํ์์ ์ป์ ์ ์๋ ๊ฐ์ฅ ์ข์ ๋ต์ ์ํ์ ์ฐพ์ ๋ธ๋ค.
ํ์์ ์์๋ฅผ ๋ฐ๊พธ๊ฑฐ๋, ํ์ ์์ ์ ์ ํ์๋ฒ์ ์ด์ฉํด ์ ๋นํ ์ข์ ๋ต์ ์ฐ์ ์ฐพ์๋ ๋๋ค. ์์ ํ์์ ๊ฒฝ์ฐ ๋ต์ ์ด๋ค ์์๋ก ์ฐพ์๋ด๊ฑด ์๊ด์์ง๋ง, ๊ฐ์ง์น๊ธฐ์ ํจ๊ป ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ ์ข์ ๋ต ์ ์๊ณ ์์ผ๋ฉด ์ข๋ ์ผ์ฐ ํ์์ ์ค๋จํ ์ ์๊ธฐ ๋๋ฌธ์ ํ์์ ํจ์จ์ด ์ข์์ง๋ค.
์๋ ๊ทธ๋ฆผ์ ์ด์ ๊ฐ์ ๊ธฐ๋ฒ๋ค์ด ์์ ํ์์ ์ด๋ป๊ฒ ๋น ๋ฅด๊ฒ ํ๋์ง๋ฅผ ๋ณด์ฌ ์ค๋ค. ํ์ ๊ณต๊ฐ ๋ด์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ต(๋ณํ ํ์)์ด ์ธ ๊ฐ ์๊ณ , ์์ ์ํ์์ ๊ฐ๊น์ธ์๋ก ๋ ์ข์ ๋ต์ด๋ผ๊ณ ํฉ์๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ต์ ํด๋ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์๋ ๋ณํ๊ฐ ๋ฉ๋๋ค. ๊ทธ๋ฆผ 11.2(a)๋ ๊ฐ์ง์น๊ธฐ๋ฅผ ์ ์ฉํ ์์ ํ์์ ์ํ ๊ณผ์ ์ ๋ณด์ฌ์ค๋ค. ๋งจ ์ผ์ชฝ์ ์๋ ๋ต์ ์ฐพ์ ์ดํ์๋ ๊ทธ ์ด์ ๊น์ด ํ์ํ์ง ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๋ฏธ ๋ต์ ํ๋ ์ฐพ์๋ค๋ฉด ์์ ์ํ๋ก ๋ถํฐ ๊ทธ๋ณด๋ค ๋ฉ๋ฆฌ ๋จ์ด์ง ์ํ๋ฅผ ํ์ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ. ๊ทธ๋ฆผ 11.2(b)๋ ์ข์ ๋ต์ ์ผ์ฐ ์ฐพ์๋ด๋ ๊ธฐ ๋ฒ์ ์ ์ฉํ ์์ ํ์์ ์ํ ๊ณผ์ ์ ๋ณด์ฌ์ค๋ค. ์ ์ ํ ํ์๋ฒ์ด๋ ํด๋ฆฌ์คํฑ์ ์ด์ฉํด ๊ฐ์ด๋ฐ ์๋ ๋ต์ ๋จผ์ ์ฐพ์๋๋ค๊ณ ํ์. ๊ทธ๋ฌ๋ฉด ๊น์ด 6 ์ดํ๋ก ๋ด๋ ค๊ฐ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ ์ ์ ์ํ๋ง์ ๊ฒ์ฌํ๊ณ ์ต์ ํด๋ฅผ ์ฐพ์๋ผ ์ ์๋ค.
์ด ์ ์์๋ ์กฐํฉ ์ต์ ํ ๋ฌธ์ ๋ฅผ ํธ๋ ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ํ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ๋ค์ ์๊ฐํ๊ณ , ๋ํ์ ์ต์ ํ ๋ฌธ์ ์ธ ์ฌํํ๋ ์ธํ์ ๋ฌธ์ 1(TSP)๋ฅผ ํธ๋ ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ด ๊ธฐ ๋ฒ๋ค์ ์ ์ฉํ๋ฉด์ ๋ณํํ๋ ์ํ ์๋๋ฅผ ๊ด์ฐฐํด ๋ณด์.
์ต์ ํ | ์ํ(n=12) | ์คํ(n=16) | ๋ํ(n=20) | ์ด๋ํ(n=24) |
๋์ ๊ณํ๋ฒ | 0.03์ด | 0.58์ด | 26.45์ด | 768.21์ด |
์ ๋ ฅ์ด ์ปค์ง๋ฉด ์ปค์ง์๋ก ์ํ ์๊ฐ์ด ๊ธ๊ฒฉํ ์ฆ๊ฐํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋์ ๊ณํ๋ฒ์ด ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๋ํ ์ ๋ ฅ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ง์์ ์ผ๋ก ์ปค์ง๋ค. ์ด๋ํ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋์ ๊ณํ๋ฒ ์๊ณ ๋ฆฌ์ฆ์ ์ฝ 3GB์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์๋ก ํ๋ค. ๋ง์ฝ ์ปดํจํฐ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ชจ์๋๋ค๋ฉด ๊ฒฐ๊ตญ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉ ํด์ผ ํ์ ํ ๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก ์์ํ ์ ์์ ์ ๋๋ก ๋๋ ค์ก์ ๊ฒ.
์ฐ์ ์ต์ ํ์ ๊ธฐ๋ณธ์ด ๋ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ผ๋๋ฅผ ๊ตฌํํด ๋ณด์. ์๋ฌด๋ฐ ์ต์ ํ๋ ํ์ง ์์ ์์ ํ์์ ๊ตฌํ์ ๋ณด์ฌ์ค๋๋ค. ์์ ํ์์ ๋ค๋ฃจ๋ ์ฅ์์ ์์ฑํ์ฝ๋์ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ์ ์ํ๋ฉฐ ๋ณด๋ฉด shortestPath() ๊ฒฝ๋ก์ ๊ธธ์ด๋ฅผ ์ง์ ๋ฐํํ์ง๋ง, search()๋ ๊ฒฝ๋ก์ ๊ธธ์ด๋ฅผ ์ง์ ๋ฐํํ์ง ์๊ณ ์ ์ญ ๋ณ์ best๋ฅผ ๊ฐฑ์ ํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. ์ด๋ ๊ฒ ์ ์ญ ๋ณ์์ ์ง๊ธ๊น์ง ์ฐพ์ ์ต์ ํด์ ๊ธธ์ด๋ฅผ ์ ์ฅํด ๋๋ฉด ํ์ ์ค์ ๋ ์ต์ ํด๋ฅผ ๋ฐ๊ฒฌํ ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฐ์ง๋ฅผ ์ณ๋ด๊ธฐ ์ฌ์์ง๋๋ค.
์ด์ ๊ฐ์ ๋จ์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ํ ์๋๋ search()๊ฐ ๋ง๋๋ ๊ฒฝ๋ก์ ์๋ (n-1)!๊ฐ๊ฐ ๋๋ค. 11!๋ ์ฝ 4์ฒ๋ง ์ ๋ ๋๋ ์์ด๋ฏ๋ก, ์ํ ์ ๋ ฅ์ ๊ทธ๋ญ์ ๋ญ ํ ์ ์๋ค. ๋จ ์คํ ์ ๋ ฅ์์ ๊ฒฝ๋ก์ ๊ฐ์๋ 12 * 13 * 14 * 15 = 30,000๋ฐฐ ๋๊ธฐ ๋๋ฌธ์ ์คํ ์ ๋ ฅ์ ํ๊ธฐ๋ ๋ถ๊ฐ๋ฅํ ๊ฑฐ ๋ผ ์์ธกํ ์ ์๋ค. ์ํ ์ ๋ ฅ์ด 1๋ถ 30์ด ์ ๋ ๊ฑธ๋ฆด๋, ์ฐ๋ฆฌ ๊ณ์ฐ๋๋ก๋ผ๋ฉด ์คํ ์ ๋ ฅ์๋ง 4๋ง 5์ฒ ๋ถ(750์๊ฐ)์ด๋ ๋๋ ์๊ฐ์ด ์๋ชจ๋ ๊ฑฐ๋ผ๊ณ ์์ธกํ ์ ์๋ค. ์ด์ ์ด๊ฒ์ ์ต์ ํ ํด๋ณด์.
๊ฐ์ฅ ๊ธฐ์ด์ ์ธ ๊ฐ์ง์น๊ธฐ ๋ฐฉ๋ฒ์ ํ์ฌ ์ํ์ ๋ต์ด ์ง๊ธ๊น์ง ๊ตฌํ ์ต์ ํด์ ๊ฐ๊ฑฐ๋ ๋ ๋์ ๋ ํ์์ ์ค๋จํ๋ ๊ฒ. TSP์์๋ ์ง๊ธ๊น์ง ๋ง๋ ๊ฒฝ๋ก์ ๊ธธ์ด๋ฅผ ์๊ณ ์๊ธฐ ๋๋ฌธ์, ์ด๊ฒ์ ์ต์ ํด์ ๋น๊ตํ๋ฉด ์ด ๊ฐ์ง์น ๊ธฐ๋ฅผ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๋ค. ๋ค์๊ณผ ๊ฐ์ ํ ์ค์ ์กฐ๊ฑด๋ฌธ์ search() ํจ์์ ์ฒ์์ ์ถ๊ฐํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถ.
// ๊ฐ๋จํ ๊ฐ์ง์น๊ธฐ: ์ง๊ธ๊น์ง ์ฐพ์ ๊ฐ์ฅ ์ข์ ๋ต ์ด์์ผ ๊ฒฝ์ฐ ์ค๋จ
if best <= currentLength {return}
์ต์ํ ํ์ฌ ๊ฒฝ๋ก์ ๊ธธ์ด๊ฐ ์ง๊ธ๊น์ง ๊ฐ์ง๊ณ ์๋ ์ต์ ํด๋ณด๋ค ์ปค์ก์ ๋๋ ํ์์ ์ข ๋ฃํ๋ฏ๋ก, n!๊ฐ์ ๊ฒฝ๋ก๋ฅผ ์ ๋ถ ๋ง๋ค์ด ๋ณด์ง๋ ์๋๋ค.
์ต์ ํ | ์ํ(n=12) | ์คํ(n=16) | ๋ํ(n=20) | ์ด๋ํ(n=24) |
๋์ ๊ณํ๋ฒ | 0.03์ด | 0.58์ด | 26.45์ด | 768.21์ด |
์์ | 89.74 | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ |
์ต์ ํด๋ณด๋ค ๋๋น ์ง๋ฉด ๊ทธ๋ง๋๊ธฐ | 2.58์ด | 981.53์ด | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ |
์ํ ์ ๋ ฅ ๋ฐ์ดํฐ ํด๊ฒฐ ์๊ฐ์ด 1/30๋ก ์ค์ด๋ฆ์ ํ์ธํ ์ ์๋ค. ์ด๋ฐ ๊ฐ๋จํ ์ต์ ํ๋ก๋ ํฐ ํจ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค.
ํด๋ฆฌ์คํฑ์ ์ด์ฉํด ๋ต์ ๋จ์ ๋ถ๋ถ์ ์ด๋ฆผ์ง์ํ๋ ๊ฐ์ง์น๊ธฐ๋ฅผ ์ด์ฉํ์ฌ ์ต์ ํํ ์ ์๋ค.
์กฐํฉ ํ์์์ ๋ฐฉ๋ฌธํ๋ ์ํ์ ์๋ ํ์์ ๊น์ด๊ฐ ๊น์ด์ง์๋ก ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ ํ์ ์ค โ์ด ๋ถ๋ถ์์๋ ์ต์ ํด๊ฐ ๋์ฌ ์ ์๋คโ๋ ๊ฒ์ ๊ฐ๋ฅํ ํ ์ผ์ฐ ์์๋ด๋ ๊ฒ์ด ์ ๋ฆฌ.
์ด๋ฆผ์ง์ํ๋ ํด๋ฆฌ์คํฑํจ์. ํด๋ฆฌ์คํฑ์ ๋ฐํ๊ฐ์ ํญ์ ์ ํํ ๋ต์ผ ํ์๋ ์๊ณ ๊ทธ๋ด ์๋ ์๋ค. ์ฐ๋ฆฌ๊ฐ ๊ธฐ๋ํ๋ ํด๋ฆฌ์คํฑ์ '์ ๋นํ ๊ทธ๋ด๋ฏํ' ์ง์์ ๋๋ ค๋ฐ๋ ๊ฒ.
ํด๋ฆฌ์คํฑ์ด ์ค์ ํ์ํ ๊ฒฝ๋ก๋ณด๋ค ๋ ๊ธด ๊ฒฝ๋ก๊ฐ ํ์ํ๋ค๊ณ ์๋ชป ์ง์ํ ๊ฒฝ์ฐ์๋ ์ต์ ํด๋ฅผ ์ฐพ์ ์ ์๋ ์ํ๋ฅผ ๊ฑธ๋ฌ๋ด ๋ฒ๋ฆฌ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ฌธ์ ์ ์ต์ ํด๋ ์์ ์ฐพ์ง ๋ชปํ ์ฑ ์ข ๋ฃํ ์ ๋ฐ์ ์๋ค. ์ด๋ฐ ์ผ์ด ์ผ์ด๋์ง ์๊ธฐ ์ํด์๋ ํด๋ฆฌ์คํฑ์ ๋ฐํ ๊ฐ์ด ํญ์ ๋จ์ ์ต๋จ ๊ฒฝ๋ก์ ๊ธธ์ด ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํ๋ค.
์ด๋ฐ ๋ฐฉ๋ฒ์ ๋ฌธ์ ๋ฅผ ๊ณผ์ํ๊ฐ(underestimate)ํ๋ ํด๋ฆฌ์คํฑ, ํน์ ๋๊ด์ ์ธ ํด๋ฆฌ์คํฑ(optimistic)๋ผ๊ณ ๋งํ๋ค.
๋จ์ ๋์๋ฅผ ๋ชจ๋ ๋ฐฉ๋ฌธํ ํ์ ์์ด, ๊ฐ์ฅ ๋ฉ๋ฆฌ ์๋ ๋์ ํ๋๋ง ๋ฐฉ๋ฌธํ๋ค๊ฐ ์์์ ์ผ๋ก ๋์๊ฐ๋ ๋๋ค. ๋จ์ ๋์๋ค์ ๋ฐฉ๋ฌธํ๋ ๋ฐฉ๋ฒ์ด ๊ผญ ์ผ๋ ฌ๋ก ์ฐ๊ฒฐ๋ ํํ๊ฐ ์๋์ด๋ ๋๋ค.
์ธ์ ํ ๊ฐ์ ์ค ๊ฐ์ฅ ์งง์ ๊ฐ์ ์ ๊ธธ์ด๋ฅผ ๋ํ๋ ๊ฒ. ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๋์๋ฅผ ๋ฐฉ๋ฌธํ๋ ค๋ฉด ์ธ์ ํ ๊ฐ์ ์ค ํ๋๋ฅผ ํ๊ณ ๊ฐ์ผ ํ๋ฏ๋ก, ์ด๋ค ์ค ๊ฐ์ฅ ์งง์ ๊ฐ์ ์ ๊ธธ์ด๋ง ๋ชจ์ผ๋ฉด ์ค์ ์ต๋จ ๊ฒฝ๋ก ์ดํ์ ๊ฐ์ด ๋ ์ ๋ฐ์์๋ค.
๋จ์ ํด๋ฆฌ์คํฑ TSP ๊ตฌํ ๐
์ต์ ํ | ์ํ(n=12) | ์คํ(n=16) | ๋ํ(n=20) | ์ด๋ํ(n=24) |
๋์ ๊ณํ๋ฒ | 0.03์ด | 0.58์ด | 26.45์ด | 768.21์ด |
์์ | 89.74 | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ |
์ต์ ํด๋ณด๋ค ๋๋น ์ง๋ฉด ๊ทธ๋ง๋๊ธฐ | 2.58์ด | 981.53์ด | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ |
๋จ์ํ ํด๋ฆฌ์คํฑ | 0.85์ด | 84.18์ด | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ |
๋์๋ฅผ ๋ฒํธ ์์๋๋ก ๋ฐฉ๋ฌธํ๋ ๋์ , ๋ ๊ฐ๊น์ด ๊ฒ๋ถํฐ ๋ฐฉ๋ฌธํ์ฌ ์ข์ ๋ต์ ๋ ๋นจ๋ฆฌ ์ฐพ์๋ด์.
์ด์ ๊ฐ์ ์ ๋ต์ด ํญ์ ์ต์ ํด๋ฅผ ๊ฐ์ ธ๋ค ์ฃผ๋ ๊ฒ์ ์๋์ง๋ง, ์ด๋ ์ ๋ ์ข์ ๋ต์ ์ข๋ ์ผ์ฐ ๋ฐ๊ฒฌํ ํ๋ฅ ์ ์ฌ๋ผ๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ข์ ๋ต์ ์ผ์ฐ ์ฐพ์์๋ก ๊ฐ์ง์น๊ธฐ๋ฅผ ๋ ๋ง์ด ํ ์ ์๋ค.
๊ฐ๊น์ด ๋์ TSP ๊ตฌํ ๐
์ต์ ํ | ์ํ(n=12) | ์คํ(n=16) | ๋ํ(n=20) | ์ด๋ํ(n=24) |
๋์ ๊ณํ๋ฒ | 0.03์ด | 0.58์ด | 26.45์ด | 768.21์ด |
์ต์ ํด๋ณด๋ค ๋๋น ์ง๋ฉด ๊ทธ๋ง๋๊ธฐ | 2.58์ด | 981.53์ด | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ |
๋จ์ํ ํด๋ฆฌ์คํฑ | 0.85์ด | 84.18์ด | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ |
๊ฐ๊น์ด ๋์๋ถํฐ ๋ฐฉ๋ฌธํ๊ธฐ | 0.52์ด | 31.03์ด | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ |
์ด ์กฐํฉ ํ์์ ์ํ์ ํ์์ ์์ํ๊ธฐ์ ์ ํ์๋ฒ์ผ๋ก ์ด๊ธฐํด๋ฅผ ๊ตฌํ๋ ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ์ง๋๋ค.
์์ผ๋ก ๋จ์ ์กฐ๊ฐ๋ค์ ๋น์ฉ์ ์์ธกํ์ฌ ๊ฐ์ง์น๊ธฐํ๋ ๋ฐฉ๋ฒ์ด ์๋๋ผ, ์ง๊ธ๊น์ง ๋ง๋ ๊ฒฝ๋ก๋ฅผ ๊ฒ์ฌํด ๊ฐ์ง์น๊ธฐ๋ฅผ ํ ์๋ ์๋ค.
์ง๊ธ๊น์ง ๋ง๋ ๊ฒฝ๋ก๊ฐ ์์ ์ํ์์ ํ์ฌ ์ํ๊น์ง ๋๋ฌํ๋ ์ต์ ํด๊ฐ ์๋๋ฉด, ์์ผ๋ก ๋จ์ ์กฐ๊ฐ์ ์ ์ ํํด ๋ดค์ ์ต์ ํด๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒ์ด๊ณ , ํ์์ ๊ณ์ํ ์ด์ ๊ฐ ์๋ค.
(..., ..., p, a, b, q, here)
์์๊ฐ์ ๊ฒฝ๋ก์์ a์ b์ ์์๋ฅผ ๋ฐ๊ฟ ๋ณด์์๋, p - q๊ตฌ๊ฐ์ ๊ฑฐ๋ฆฌ๊ฐ ๋ ์งง์์ง๋ค๋ฉด ์ด ๊ฒฝ๋ก์์ ์ต์ ํด๋ฅผ ์ฐพ์ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ ํ์์ ์ค๋จํด๋ ๋๋ค.
์ง๋์จ ๊ฒฝ๋ก ์์ ๋ณ๊ฒฝ TSP ๊ตฌํ ๐
์ต์ ํ | ์ํ(n=12) | ์คํ(n=16) | ๋ํ(n=20) | ์ด๋ํ(n=24) |
๋์ ๊ณํ๋ฒ | 0.03์ด | 0.58์ด | 26.45์ด | 768.21์ด |
์ต์ ํด๋ณด๋ค ๋๋น ์ง๋ฉด ๊ทธ๋ง๋๊ธฐ | 2.58์ด | 981.53์ด | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ |
๋จ์ํ ํด๋ฆฌ์คํฑ | 0.85์ด | 84.18์ด | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ |
๊ฐ๊น์ด ๋์๋ถํฐ ๋ฐฉ๋ฌธํ๊ธฐ | 0.52์ด | 31.03์ด | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ |
์ธ์ ํ ๋ ๋์ ์์ ๋ฐ๊พธ๋ ๊ฐ์ง์น๊ธฐ | 0.15์ด | 4.64์ด | 233.52์ด | ์๊ฐ์ด๊ณผ |
๋ถ๋ถ ๊ฒฝ๋ก ๋ค์ง๋ ๊ฐ์ง์น๊ธฐ | 0.07์ด | 1.13์ด | 33.29์ด | 1160.81์ด |
๋ฌธ์ ์ ์ ์ฝ์ ๋๋ฌด ๋ง์ด ์์ ์ ๋ต์ ๋๋ฌด ๊ณผ์ํ๊ฐํ๋ ๊ฒฝํฅ์ด ์๋ค.
์ข๋ ํ์ค์ ๊ฐ๊น์ด ๋ต์ ๊ณ์ฐํ๋ ํด๋ฆฌ์คํฑ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ค๋ฉด ๊น์ด ์ฐ์ ํ์์ ํจ์จ์ ํฐ ๋์์ด ๋ ๊ฒ์ด๋ค. ์ข๋ ํ์ค์ ๊ฐ๊น์ด ๋ต์ ๊ณ์ฐํ๊ธฐ ์ํด ๋ค์ ์ ์ฝ์ ์ถ๊ฐํ๋ค.
- ํ ๊ฐ์ ์ ์ต๋ ํ ๋ฒ๋ง ์ ํํ ์ ์๋ค.
- ์ ํํ์ง ์์ ๊ฐ์ ์ ๋ชจ๋ ์ง์ ์ ๋ ๊ทธ๋ํ๊ฐ ๋ ์ด์์ผ๋ก ์ชผ๊ฐ์ง๋ฉด ์ ๋๋ค.
์ ํํ ๊ฐ์ ๋ค๋ง ๋จ๊ฒผ์ ๋ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ๋ค๊ณผ ํ์ฌ ์ ์ ์ด ์ฐ๊ฒฐ๋์ด ์๊ฒ๋ ํด์ผ ํ๋ค๋ ๋ป.
ํฌ๋ฃจ์ค์นผ์ ์คํจ๋ ํธ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด MST๋ฅผ ๊ตฌํ๊ณ ๊ฐ์ ๊ฐ์ค์น์ ํฉ์ผ๋ก๋ถํฐ ํ์์ ํํ ๊ฐ์ ์์ํ๋ mstHeuristic์ ๊ตฌํํ๋ค.
MST Heuristic TSP ๊ตฌํ ํ์ง ์์
์ต์ ํ | ์ํ(n=12) | ์คํ(n=16) | ๋ํ(n=20) | ์ด๋ํ(n=24) |
๋์ ๊ณํ๋ฒ | 0.03์ด | 0.58์ด | 26.45์ด | 768.21์ด |
๋ถ๋ถ ๊ฒฝ๋ก ๋ค์ง๋ ๊ฐ์ง์น๊ธฐ | 0.07์ด | 1.13์ด | 33.29์ด | 1160.81์ด |
MST | 0.06์ด | 0.37์ด | 14.77์ด | 836.43์ด |
MST ํด๋ฆฌ์คํฑ์ ๋จ์ํ ํด๋ฆฌ์คํฑ ๋ณด๋ค ํจ์ฌ ์ ํํ ๊ฐ์ ์ฐพ์์ค๋ค. ํ ๊ฐ์ง ์ ์ํ ์ ์ mstHeuristic()์ simpleHeuristic()๋ณด๋ค ์ํํ๋ ๋ฐ ํจ์ฌ ๋ง์ ์๊ฐ์ ์๊ตฌํ๋ค๋ ๊ฒ. ํ์ง๋ง ๊ฒฐ๊ณผ์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ด ํจ์ฌ ๋นจ๋ผ์ก์ผ๋ ๊ฐ์ง์น๊ธฐ์์ ์ ์ฝํ ์๊ฐ์ด MST ๊ณ์ฐ์ ๋๋ ์๊ฐ๋ณด๋ค ํจ์ฌ ์ปธ์์ ์ ์ ์๋ค.
๊ฐ์ ์ํ๋ฅผ ๋ ๊ฐ ์ด์์ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐฉ๋ฌธํ ์ ์์ ๋, ์ด๋ฐ ๋นํจ์จ์ ๋ฉ๋ชจ์ด์ ์ด์ ์ผ๋ก ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข๊ฒ ๋ค๋ ์์ด๋์ด๋ฅผ ์์ฐ์ค๋ฝ ๊ฒ ๋ ์ฌ๋ฆด ์ ์๋ค. ๊ทธ๋ฅ ์ฌ์ฉํ๊ธฐ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๊ฒ์ด๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ๋จ์ ์กฐ๊ฐ์ ์๊ฐ ๋ฏธ๋ฆฌ ์ ํด๋ ์ k ์ดํ์ผ ๋๋ง ๋ฉ๋ชจ์ด์ ์ด์ ์ ํ์. ์๋ฅผ ๋ค์ด TSP์ ๊ฒฝ์ฐ, 5๊ฐ ์ดํ์ ๋์๊ฐ ๋จ์์ ๋๋ง ๋ฉ๋ชจ์ด์ ์ด์ ์ ํ๋๋ก ํ๋ ๊ฒ. ๋์์ ์๊ฐ 20์ผ ๋ ๊ทธ๋ฅ ๋์ ๊ณํ๋ฒ์ ํ์ ๋๋ ์ฝ 2์ฒ๋ง ๊ฐ์ ์ํ๋ฅผ ์ ์ฅํด์ผ ํ์ง๋ง, ๋ง์ง๋ง 5๋จ๊ณ๋ง ๋ฉ๋ชจ์ด์ ์ด์ ํ๊ธฐ๋ก ํ๋ฉด ์ ์ฅํด์ผ ํ๋ ์ํ์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
20 * ((20/5) + (20/4) + (20/3) + (20/2) + (20/1)) == ์ฝ 440000
๋๋ต 44๋ง ๊ฐ์ ์ํ๋ง์ ์ ์ฅํ๋ฉด ๋๋ค. ๋ง์ง๋ง 5๊ฐ์ ๋์๋ฅผ ๋ฐฐ์นํ๋ ๋ฌธ์ ๋ฅผ 5! = 120๋ฒ ํธ๋ ๋์ ์ ํ ๋ฒ๋ง ํ๊ฒ ๋๋ ํ์ ์๋๊ฐ ์ต๋ 120๋ฐฐ ๋นจ๋ผ์ง ์๋ ์๋ค๋ ๊ฒ์ด ์ค์ ์ด๋ค.
๋จ ์ด์ ๊ฐ์ ์ด๋์ ์ฝ๊ฒ ์ป์ ์๋ ์๋ค. ๊ฐ์ง์น๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ํจ์๋ ์ฝ๊ฒ ๋ฉ๋ชจ์ด์ ์ด์ ํ ์ ์๊ธฐ ๋๋ฌธ. ๋ฉ๋ชจ์ด์ ์ด์ ์ ํ๊ธฐ ์ํด์๋ ํจ์์ ๋ฐํ ๊ฐ์ด ํ์ฌ์ ์ํ์๋ง ์ํฅ์ ๋ฐ์์ผ ํ๋๋ฐ, ๊ฐ์ง์น๊ธฐ๋ฅผ ์ ์ฉํ๋ฉด ํ์ฌ ์ํ๊น์ง ์ค๊ธฐ ์ํ ๊ฒฝ๋ก์ ๋ฐ๋ผ ๋ฐํ ๊ฐ์ด ๋ฌ๋ผ์ง ์ ์๊ธฐ ๋๋ฌธ, ๋ฌผ๋ก ๊ฒฝ๋ก๊น์ง ๋ฉ๋ชจ์ด์ ์ด์ ์ ํค๋ก ์ฌ์ฉํ๋ฉด ๋ต์ด ํ๋ฆฌ์ง๋ ์๊ฒ ์ง๋ง, ๊ฒฝ๋ก๋ค์ ์๋ก ๊ฒน์น์ง ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ฐ๋ ์๋ฏธ๊ฐ ์๋ค. ๋ฐ๋ผ์ ์ด ๋ฐฉ๋ฒ์ ์ด์ฉํ๊ธฐ ์ํด์๋ ๊ฐ์ง์น๊ธฐ๋ฅผ ์ฌ์ฉํ์ง ์๋ ๋์ ๊ณํ๋ฒ ํจ์๋ฅผ ๋ณ๋๋ก ์์ฑํ ๋ค, ๋ง์ง๋ง k๋จ๊ณ์ ๋๋ฌํ๋ฉด ์ด ํจ์๋ฅผ ์ฌ์ฉํ๋๋ก ๊ตฌํํด์ผ ํ๋ค.
์ต์ ํ | ์ํ(n=12) | ์คํ(n=16) | ๋ํ(n=20) | ์ด๋ํ(n=24) |
๋์ ๊ณํ๋ฒ | 0.03์ด | 0.58์ด | 26.45์ด | 768.21์ด |
๋ถ๋ถ ๊ฒฝ๋ก ๋ค์ง๋ ๊ฐ์ง์น๊ธฐ | 0.07์ด | 1.13์ด | 33.29์ด | 1160.81์ด |
MST | 0.06์ด | 0.37์ด | 14.77์ด | 836.43์ด |
๋ฉ๋ชจ์ด์ ์ด์ | 0.06์ด | 0.28์ด | 2.91์ด | 25.24์ด |
๋ถ๋ถ DP TSP์์๋ ๋์ ๊ณํ๋ฒ์ผ๋ก ์ ํํ๋ ์์ CACHED_DEPTH๋ฅผ ์์๋ก ์ง์ ํ๋ค. ์ด ๊ฐ์ ๊ฒฐ์ ํ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ ์์ต๋๋ค. ์ด ๊ฐ์ด ํฌ๋ฉด ํด์๋ก ๋ ๋ง์ ์ํ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํ๊ฒ ์ง๋ง, ์์๊ฐ ๋ง์์ง๋ฉด ๋ง์์ง์๋ก ์ ์ ๊ทผ ํ๋ ๋น์ฉ์ด ๋์ด๋๊ธฐ ๋๋ฌธ.
์ต์ ํ | ์ํ(n=12) | ์คํ(n=16) | ๋ํ(n=20) | ์ด๋ํ(n=24) |
๋์ ๊ณํ๋ฒ | 0.03์ด | 0.58์ด | 26.45์ด | 768.21์ด |
์์ | 89.74 | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ |
์ต์ ํด๋ณด๋ค ๋๋น ์ง๋ฉด ๊ทธ๋ง๋๊ธฐ | 2.58์ด | 981.53์ด | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ |
๋จ์ํ ํด๋ฆฌ์คํฑ | 0.85์ด | 84.18์ด | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ |
๊ฐ๊น์ด ๋์๋ถํฐ ๋ฐฉ๋ฌธํ๊ธฐ | 0.52์ด | 31.03์ด | ์๊ฐ์ด๊ณผ | ์๊ฐ์ด๊ณผ |
์ธ์ ํ ๋ ๋์ ์์ ๋ฐ๊พธ๋ ๊ฐ์ง์น๊ธฐ | 0.15์ด | 4.64์ด | 233.52์ด | ์๊ฐ์ด๊ณผ |
๋ถ๋ถ ๊ฒฝ๋ก ๋ค์ง๋ ๊ฐ์ง์น๊ธฐ | 0.07์ด | 1.13์ด | 33.29์ด | 1160.81์ด |
MST | 0.06์ด | 0.37์ด | 14.77์ด | 836.43์ด |
๋ฉ๋ชจ์ด์ ์ด์ | 0.06์ด | 0.28์ด | 2.91์ด | 25.24์ด |
์ฌ๊ธฐ์ ์๊ฐํ ์๊ณ ๋ฆฌ์ฆ์ TSP๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ๊ณผ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ ์ค์ ๋ก๋ TSP๋ง์ ํด๊ฒฐํ๊ธฐ ์ํด ๊ณ ์๋ ํ๋ก๊ทธ๋จ๋ค ์ ์๊ณํ๋ฒ, ์ ํ๊ณํ๋ฒ ๋ฑ์ ์ฌ์ฉํจ.
https://www.math.uwaterloo.ca/tsp/index.html
๊ฒฝ๋ก์ ์ต์ ๊ธธ์ด๋ฅผ ๊ตฌํด์ผ ํ๋ TSP์๋ ๋ฌ๋ฆฌ ์ฌ๊ธฐ์๋ ๋ธ๋ก์ ์ต๋ ๊ฐ์๋ฅผ ์ฐพ๊ธฐ ๋๋ฌธ์, ํ์ฌ ๋ต์ด ์ง๊ธ๊น์ง ์ฐพ์ ์ต์ ํด๋ณด๋ค ๋์ ๊ฒฝ์ฐ ์ค๋จํ๋ ๊ฐ์ง์น๊ธฐ๋ฅผ ํ ์ ์๋ค.
๋์ ์ด ๋ฌธ์ ์์ ๊ฐ์ง์น๊ธฐ๋ฅผ ํ๋ ค๋ฉด ํ์ฌ ์ํ์์ ์ต์ ์ ๋คํด๋ ์ต์ ํด๋ณด๋ค ๋ง์ ๋ธ๋ก์ ๋ด๋ ค๋์ ์๋ ์๋ค. ์ด๋ ๊ฒ ๊ฐ์ฅ ํฐ ๋ต์ ์ฐพ๋ ์ต์ ํ ๋ฌธ์ ์์ ๋๊ด์ ์ธ ํด๋ฆฌ์คํฑ๋ค์ ๋ฌธ์ ๋ฅผ ๊ณผ์ํ๊ฐํ๋ ๋์ ์ ๊ณผ๋ํ๊ฐํ๋ค.
์ฆ, ์ค์ ๋ก ๋์ ์ ์๋ ๋ธ๋ก ์ ์ด์์ ํญ์ ๋ฐํํด์ผ ํ๋ค.
์ด๋ฐ ํด๋ฆฌ์คํฑ ํจ์๋ฅผ ๋ง๋๋ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋ธ๋ก์ ํต์งธ๋ก ๋ด๋ ค๋์์ผ ํ๋ค๋ ์ ์ฝ์ ์์ ์, ๋ธ๋ก๋ค์ ํ ์นธ์ฉ ์ชผ๊ฐ์ ๋์ ์ ์๋๋ก ๋ฌธ์ ๋ฅผ ๋ณํํ๋ ๊ฒ. ๊ทธ๋ฌ๋ฉด ์ฐ๋ฆฌ๊ฐ ๋์ ์ ์๋ ๋ธ๋ก์ ์๋ ๋จ์ํ ๋จ์ ๋น ์นธ์ ์๋ฅผ ๋ธ๋ก์ ํฌ๊ธฐ๋ก ๋๋ ๊ฒ์ด ๋๋ค.
์ด ๊ฐ์ ํญ์ ์ฐ๋ฆฌ๊ฐ ์ค์ ๋์ ์ ์๋ ๋ธ๋ก์ ์ ์ด์์ด๊ธฐ ๋๋ฌธ์, ์ฐ๋ฆฌ๊ฐ ์ป์ ์ ์๋ ๋ต์ ์ํ์ด ๋๋ค. ์ด ๋ต์ ์ํ์ด ํ์ฌ ์ฐพ์ ์ต์ ํด ์ดํ๋ผ๋ฉด ๋์ด์ ํ์์ ์ํํ ํ์๊ฐ ์๋ค.
๊ณ์ฐ ์ด๋ก ์ชฝ์์๋ ๊ฐ์ฅ ์ ๋ช ํ NP ์๋น(NP complete) ๋ฌธ์ ์ค ํ๋์ด๋ค.
์ ์ฝ๋๋ m์ด ์ต๋๊ฐ์ผ ๊ฒฝ์ฐ ๋๋ต ๋ฐฑ๋ง ๊ฐ์ ์ํ๋ฅผ ํ์ํ๋ค. ์ผํ ์๊ฐํ๋ฉด ๊ทธ๋ ๊ฒ ํฐ ์๊ฐ ์๋ ๊ฒ ๊ฐ์ง๋ง, ์ด ์ฝ๋๋ฅผ ์์ฑํด ์ ์ถํด๋ณด๋ฉด ์๊ฐ ์์ ๋์ํ์ง ์์์ ์ ์ ์๋ค.
- ๋ค์์ผ๋ก ๋ง๋ค ์์์ ๊ณ ๋ฅผ ๋ ์์ง ๋จน์ ์์์ด ์๋ ์น๊ตฌ๋ค ์ค ๊ฐ์ฅ ๋ง์ ์ฌ๋์ด ๋จน์ ์ ์๋ ์์๋ถํฐ ์๋ํ๊ธฐ
- ํด๋ฆฌ์คํฑ์ ์ด์ฉํ ๊ฐ์ง์น๊ธฐ ํด ๋ณด๊ธฐ
- ์์ง ๋จน์ ์์์ด ์๋ ์น๊ตฌ๋ค์ ์๊ฐ ์ ์ ๊ฒฝ์ฐ๋ค์ ๋ฉ๋ชจ์ด์ ์ด์ ์ผ๋ก ํด๊ฒฐํ๊ธฐ
- ์์ a๋ฅผ ๋จน์ ์ ์๋ ์น๊ตฌ๋ค์ ๋ชฉ๋ก์ด ์์ b๋ฅผ ๋จน์ ์ ์๋ ์น๊ตฌ๋ค์ ๋ชฉ๋ก์ ํฌํจํ ๋ ์์ b๋ฅผ ๋ง๋ค ํ์๊ฐ ์์ผ๋ฏ๋ก ๋ฌด์ํ๊ธฐ
- ํ์์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ์ ํ ์ด๊ธฐํด ๋ง๋ค๊ธฐ
์ด๋ฐ ์ต์ ํ๋ฅผ ํตํด ์ํ์๊ฐ์ ์ ํ ์์ผ๋ก ์ต์ ํํ ์๋ ์์ง๋ง, ์ฌ์ค ์ด ๋ฌธ์ ๋ฅผ ํธ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ํ์์ ํํ๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ด๋ค. ๊ฐ ์์์ ๋ง๋ค ๊ฒ์ธ๊ฐ ์ฌ๋ถ๋ฅผ ์ ํํ๋ ๋์ ์, ๋งค ์ฌ๊ท ํธ์ถ๋ง๋ค ์์ง ๋จน์ ์์์ด ์๋ ์น๊ตฌ๋ฅผ ํ๋ ์ฐพ์ ๋ค ์ด ์น๊ตฌ๋ฅผ ์ํด ์ด๋ค ์์์ ๋ง๋ค์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ
- search()๋ ํญ์ ๋ชจ๋ ์น๊ตฌ๊ฐ ๋จน์ ์์์ด ์๋ ์กฐํฉ๋ง์ ์ฐพ์๋ธ๋ค. ๋ฐ๋ฉด slowSearch()๋ ๋ง์ง๋ง ์กฐ๊ฐ๊น์ง ๊ฒฐ์ ํ ๋ค์๋ ๋ฐฐ๊ณ ํ ์น๊ตฌ๊ฐ ๋จ๋ ๊ฒฝ์ฐ๋ค๋ ๋ชจ๋ ํ์ํ๊ธฐ ๋๋ฌธ.
- search()๋ ํ ๋ฒ ํธ์ถ๋ ๋๋ง๋ค ํญ์ ์์์ ํ๋ ํ๊ฒ๋๋ค. ๋ฐ๋ฉด sS๋ ์์์ ํ์ง ์๊ณ ๋ ์ฌ๊ท ํธ์ถ์ ํ ์ ์๋ค. sS์ ๊น์ด๋ ํญ์ m์ผ๋ก ๊ณ ์ ๋๋ ๋ฐ๋ฉด sํ์์ ๊น์ด๋ ๋ต๊ณผ ๊ฐ์๋ฐ ๋ต์ ํญ์ m์ดํ์ ์ซ์๋ค.
- sS์์๋ ๋ฐ๋์ ํ์ํ์ง ์์ ์์๋ ๋ง๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด ์์์ ๋จน์ ์ ์๋ ์น๊ตฌ๋ค์ ์ด๋ฏธ ๋ค ๋จน์ ์์์ด ์๋ ๊ฒฝ์ฐ, ๋ฐ๋ฉด s์์๋ ์์์ ํ๋ค๋ ๋ง์ ๊ทธ ์์์ด ํ์ํ ์น๊ตฌ๊ฐ ๋ฐ๋์ ์๋ค๋ ์๋ฏธ์ด๋ค.
์ด ๋ฌธ์ ์ ๋น์ทํ ํํ๋ฅผ ๊ฐ๋ ๋ฌธ์ ๋ค์์ ์ด๋ ๊ฒ ํ์ ๋ฐฉํฅ์ ๋ฐ๊พธ๋ฉด ํจ์ฌ ๋น ๋ฅธ ์ํ ์๋๋ฅผ ์ป์ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
- ์์ง ๋จน์ ๊ฒ์ด ์๋ ์ฒซ ๋ฒ์งธ ์น๊ตฌ๋ฅผ ์ฐพ๋ ๊ฒ์ด ์๋๋ผ, ๋จน์ ์ ์๋ ์์์ ์ข ๋ฅ๊ฐ ์ ์ ์น๊ตฌ๋ฅผ ์ฐพ๋๋ก ํ๋ค. ๋ ๊ฐ์ง ์์๋ง ๋จน์ ์ ์๋ ์น๊ตฌ์๊ฒ ์ด๋ ์์์ ํด ์ค์ง ๊ฒฐ์ ํ๊ธฐ๊ฐ ์ด๊ฐ์ง ์์์ ๋จน์ ์ ์๋ ์น๊ตฌ์๊ฒ ์ด๋ ์์์ ํด ์ค์ง ๊ฒฐ์ ํ๊ธฐ๋ณด๋ค ์ฝ๋ค. ์ด ๊ฐ์ง ์์์ ๋จน์ ์ ์๋ ์น๊ตฌ๋ ์ฐ๋ฆฌ๊ฐ ๋ฐ๋ก ์ฑ๊ฒจ์ฃผ์ง ์์๋ ๋จน์ ๊ฑธ ์ฐพ์ ๊ฐ๋ฅ์ฑ ๋ํ ๋๋ค.
- ์์์ ์ ํํ ๋, ๊ฐ์ฅ ๋ง์ ์ฌ๋์ด ๋จน์ ์ ์๋ ์์๋ถํฐ ์๋ํ๋ค. ํ ๋ช ๋ง ๋จน์ ์ ์๋ ์์์ ๊ฐ๋ฅํ๋ฉด ๋ง์ง๋ง์ ๋ฐฉ๋ฒ์ด ์์ ๋ ์๋ํ๋๊ฒ ์ข๋ค.
์ด์ ๊ฐ์ ๊ธฐ๋ฒ๋ค์ ์ข๋ ์ข์ ๋ต์ ์ด๋ฐ์ ์ฐพ์๋ด์ ๊ฐ์ง์น๊ธฐ๋ฅผ ๋ ์ ํ ์ ์๋๋ก ๋์์ค๋ค.
๋ต์ ์ผ๋ถ๋ฅผ ์์ฑํ๊ณ ๋๋ฉด ๋ฌธ์ ์ ์กฐ๊ฑด์ ์ํด ๋ค๋ฅธ ์กฐ๊ฐ์ ๋ต์ ๋ํด ์๊ฒ ๋๋ ๊ฒ์ ์ ์ฝ ์ ํ(constraint propagation)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ ์ฝ ์ ํ๊ฐ ํญ์ ๋ค๋ฅธ ์กฐ๊ฐ์ ๋ต์ ์ ํํ ์์๋ด๋ ๊ฒ์ ์๋์ง๋ง, ํ์นธ์ 4๋ฅผ ์ผ์ ๋ ๋ค๋ฅธ ์นธ์ ๋ค์ด๊ฐ ๊ฐ์ ์ ์ ์๋๋ผ๋, ์ด๋ค์๋ ๋์ด์ 4๊ฐ ๋ค์ด๊ฐ ์ ์๋ค๋ ์ฌ์ค์ ์์๋ด๋ ๊ฒ ๋ํ ์ ์ฝ ์ ํ๋ผ๊ณ ํ๋ค.
์ ์ฝ ์ ํ๋ ๋ต์ ์ผ๋ถ๋ฅผ ์์ฑํ ๋ค ์ฌ๊ธฐ์ ์ป์ ์ ์๋ ์ ๋ณด๋ฅผ ์ต๋ํ ๋ง์ด ์ฐพ์๋ด๋ ๊ฒ.
์ ์ฝ ์ ํ๋ฅผ ์ด์ฉํ๋ฉด ์ค์ ํ์ํด์ผ ํ ํ์ ๊ณต๊ฐ์ ์๊ฐ ํฌ๊ฒ ์ค์ด๋ ๋ค.
- ๋ณ์ ์์ ์ ํ๊ธฐ(variable ordering) - ์ด๋ ๋น ์นธ๋ถํฐ ์ฑ์๋๊ฐ์ง๋ฅผ ๊ฒฐ์
- ๊ฐ ์์ ์ ํ๊ธฐ(value ordering) - ์ด ๋น ์นธ์ ์ด๋ค ์ซ์๋ถํฐ ์ฑ์๋๊ฐ ๊ฒ์ธ์ง๋ฅผ ๋งํ๋ค.
์ด๋ค ํํธ์ ๋ํ ์ ๋ณด๊ฐ ์ฃผ์ด์ง ๋, ์ด ํํธ์ ํด๋นํ๋ ์นธ๋ค์ ๋ค์ด๊ฐ ์ ์๋ ํ๋ณด ์ซ์๋ค์ ๋ชฉ๋ก์ ๋ฐํํ๋ ํจ์ ๊ตฌํ
getCandidate(len, sum, known[])
๋ฉ๋ชจ์ด์ ์ด์ ๊ตฌํ ๐