ํ๊ต ํ๋ก์ ํธ์ ์ผํ์ผ๋ก ์ฐ๋ฆฌ๋ ํ์ฌ ๊ฐ์ ๊ทธ๋ํ ์์น ์๊ณ ๋ฆฌ์ฆ์ ์๋๋ฅผ ๋์ด๊ฑฐ๋ ํฅ์์ํฌ ์ ์๋ ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์์ ํด ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋ ๋น ๋ฅธ ๋ฒ์ ์ Brown ๊ณ ์ ์๊ณ ๋ฆฌ์ฆ, Brelaz DSATUR ์๊ณ ๋ฆฌ์ฆ ๋ฐ PASS ์๊ณ ๋ฆฌ์ฆ์ด ํฌํจ๋ฉ๋๋ค. ๋ํ ์ต๋ ํ๋ฒ์ ๋ฏธ๋ฆฌ ์ฑ์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ์ด๋ฅผ ์ํด ํด๋ฆฌํฌ ์ธ๋ถ์ ์ ์ ์ ์ฐ๊ฒฐ๋๋ ๊ฐ์ฅ์๋ฆฌ๊ฐ ๊ฐ์ฅ ๋ง์ ์ต๋ ํด๋ฆฌํฌ๋ฅผ ๋ฐํํ๋ ์ถ๊ฐ ํด๋ฆฌํฌ ํ์ธ๋๋ ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ๊ทธ๋ํ ์ ์ฒ๋ฆฌ(์์์ ์ํฅ์ ๋ฏธ์น์ง ์๋ ๊ผญ์ง์ ์ ๊ฑฐ)๋ฅผ ๊ตฌํํ์ต๋๋ค. ์ด๋ฌํ ์ ๊ฑฐ๋ ์ ์ ์ ๋์ค์ ์ฌ๋ฐ๋ฅธ ์์์ผ๋ก ์ถ๊ฐ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ์ ์ถ๋ ฅ์ ์์์ ๋์ผํ ์์ ์์์ ์ฌ์ฉํ๋ ์์ ํ ์์์ ๊ทธ๋ํ์ ๋๋ค.
์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ์ JGrapht ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํตํฉํ์ต๋๋ค. ์ด๊ฒ์ด ๋น์ ์ด ๊ด์ฌ์ ๊ฐ์ง ๋งํ ๊ฒ์ ๋๊น?
ํ์คํ ํฅ๋ฏธ๋ก์ธ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ๊ณผ๊ฑฐ ๊ฒฝํ์ ๋น์ถ์ด ๋ณผ ๋ ๊ธฐ์ฌ๋ฅผ ์์ ๋ถ๋ถ์ผ๋ก ๋๋๊ณ ๊ฒํ ๊ฐ ๋ถ๊ฐ๋ฅํ ํ๋์ ๊ฑฐ๋ํ pull-request ๋์ ์๊ณ ์ ๋ฌธ์ํ๋๊ณ ์์ฒด์ ์ผ๋ก ํฌํจ๋ pull-request๋ฅผ ์ ์ถํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
๊ฒ๋ค๊ฐ, ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์์ฌ ๋ง์ ์์น ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ฐ๊ฒฌ์ DSATUR
์๊ณ ๋ฆฌ์ฆ์ SaturationDegreeColoring
ํด๋์ค์์ ๊ตฌํ๋ฉ๋๋ค.
DSATUR
๊ฐ Brelaz์ ์ ํํ ๋ถ๊ธฐ ๋ฐ ๋ฐ์ธ๋ฉ๋ DSATUR
์๊ณ ๋ฆฌ์ฆ์ ์๋ฏธํ๋ค๋ฉด ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋์น๊ณ ์์ผ๋ฉฐ ์ค์ ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจํ๋ ๊ฒ์ด ์ข์ ๊ฒ์
๋๋ค. ๋ํ PASS ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฐ์ ๊ฐ์ ๋ ๋ฒ์ ๋ ๋งค์ฐ ํ์ํฉ๋๋ค.
์ผ! ๊ด์ฌ์ด ์๋ค๋ ์์์ ๋ค์ผ๋ ์ข๋ค์! ์ ๋ ์ค์ ๋ก Brelaz์ ๋ถ๊ธฐ ๋ฐ ๋ฐ์ธ๋ฉ๋ DSATUR ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค. ๋ค๋ฅธ pull ์์ฒญ์ ์ ๋ก๋ํ๋ ๊ฒ์ ๋ด๋ถ ์ข ์์ฑ์ผ๋ก ์ธํด ์ฝ๊ฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์ด ์ธ ๊ฐ์ง ์ญ์ถ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ชจ๋ ์ ์ฌ์ ์ด ๋ง๊ธฐ ๋๋ฌธ์ ์ค๋ณต ์ฝ๋๋ฅผ ์ ํํ๋ ์์ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. BaseBronKerboschCliqueFinder ๋ฐ ํ์ ํ์ ํด๋์ค์ ์ฌ์ฉ๋๋ ๊ตฌ์กฐ์ ์ ์ฌํฉ๋๋ค. ๋ํ, cliquefinder๋ ์ต๊ณ ์ clique๋ฅผ ์ฌ์ ์ฑ์ํ๊ธฐ ์ํด backtracking ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ญ์ถ์ ์๊ณ ๋ฆฌ์ฆ์์ ์ด๊ฒ์ ์ ๊ฑฐํ๊ณ ๋ ๋์ ๊ฒฝ์ฐ ๋์ bronkerbosch clique finder๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ์ฒด ํ ์์ฒญ์ ์ด ํฌ๊ธฐ๋ 5๊ฐ์ ํด๋์ค ํ์ผ๊ณผ ํด๋น ํ ์คํธ ์ผ์ด์ค(BaseBackTrack, BackTrackColoringBrown, BackTrackColoringDSATUR, BackTrackColoringPass ๋ฐ PattabiramanMaximumCliqueFinder)์ ๋๋ค. ์ด ๊ฒฝ์ฐ ํ ๋ฆฌํ์คํธ์ ๊ดํด ์ด๋ค ์กฐ์ธ์ ํ์๊ฒ ์ต๋๊น?
๋ ๊ฐ์ pull ์์ฒญ์ผ๋ก ๋๋ ์ ์์ต๋๊น?
CliqueAlgorithm
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์๋ clique finder๊ฐ ์๋ ํ๋์ PR๋ ๋ถ๋ถ์ ๋ถ๋ฆฌํ๊ธฐ ์ํด ์ฐฉ์ ์๊ณ ๋ฆฌ์ฆ์ ์์ฑ์ ์ธ์๋ก ์์ํ ์ ์์ผ๋ฉฐ, ์ํ๋ clique ์๊ณ ๋ฆฌ์ฆ์ ๋ฐํํ๋ ํจ์์
๋๋ค. Function<Graph<V,E>, CliqueAlgorithm<V>>
๊ฐ์ ๊ฒ์ด ํธ๋ฆญ์ ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฐ๋ฆฌ๋ ๋ํ ์ฝ๊ฐ ๋ค๋ฅธ ๋ช
๋ช
์ฒด๊ณ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฐ๋ฆฌ๋ BaseBacktrackColoring, BrownBacktrackColoring, PassBacktrackColoring, DsaturBacktrackColoring
์ ํธํฉ๋๋ค.
์๊ฒฌ์ ๋ณด๋ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ต๋ํ ๋นจ๋ฆฌ ํ ๋ฆฌํ์คํธ๋ฅผ ๋ง๋ค๋๋ก ๋ ธ๋ ฅํ๊ฒ ์ต๋๋ค. ๊ฒ๋ค๊ฐ, ํ์ฌ ์ฐ๋ฆฌ์ clique ์๊ณ ๋ฆฌ์ฆ์ ํ๋์ ์ต๋ clique(์ฆ, ๊ฐ์ฅ ๋ง์ด ๊ฒฐํฉ๋ ์ ์ ์ด ์๋ ํ๋)๋ง ๋ฐํํฉ๋๋ค. ๊ณ์ฐ์ ๋ ๋น ๋ฅด๊ฒ ํ๊ธฐ ๋๋ฌธ์ ์ด ์์ ์ ์ํํ์ผ๋ฉฐ ๋จ์ผ ํด๋ฆฌํฌ์ ์ฌ์ ์์น ์๋ง ๊ด์ฌ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ๋ฒ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ ๋ชจ๋ ์ต๋ ํ๋ฒ ์ธํธ๋ฅผ ๋ฐํํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค. ์ด๊ฒ์ ๊ตฌํํ ๋ค์ MaximalCliqueEnumerationAlgorithm ์ธํฐํ์ด์ค์ ์ผ๋ถ๋ก ๋ง๋ค๊ฒ ์ต๋๊น?
MaximalCliqueEnumerationAlgorithm
๋ "์ต๋"๋ฅผ ์ด๊ฑฐํ์ง๋ง ๋ฐ๋์ "์ต๋" ํ๋ฒ์ด ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์ํ ์ธํฐํ์ด์ค์
๋๋ค.
๊ตฌํ์์ ์ต๋ ํ๋ฒ์ ๊ฒ์ํ๋ ๊ฒฝ์ฐ CliqueAlgorithm
๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
Pattabiraman et al.์ ๋
ผ๋ฌธ์ ๊ฐ๋ตํ ์ดํด๋ณธ ํ ์ฒซ ๋ฒ์งธ ์ ์๋ง ์ฌ์ฉํ์ฌ ์๊ณ ๋ฆฌ์ฆ ์ด๋ฆ์ ์ง์ ํ์ง ์๋ ํด๋์ค ์ด๋ฆ์ ์ง์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. PPGLCMaximumCliqueFinder
์ ๊ฐ์ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก Javadoc์ ์ ์ ํ ์ฐธ์กฐ๋ ํฌํจํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํ์คํ ํฅ๋ฏธ๋ก์ธ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ๊ณผ๊ฑฐ ๊ฒฝํ์ ๋น์ถ์ด ๋ณผ ๋ ๊ธฐ์ฌ๋ฅผ ์์ ๋ถ๋ถ์ผ๋ก ๋๋๊ณ ๊ฒํ ๊ฐ ๋ถ๊ฐ๋ฅํ ํ๋์ ๊ฑฐ๋ํ pull-request ๋์ ์๊ณ ์ ๋ฌธ์ํ๋๊ณ ์์ฒด์ ์ผ๋ก ํฌํจ๋ pull-request๋ฅผ ์ ์ถํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
๊ฒ๋ค๊ฐ, ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์์ฌ ๋ง์ ์์น ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ฐ๊ฒฌ์
DSATUR
์๊ณ ๋ฆฌ์ฆ์SaturationDegreeColoring
ํด๋์ค์์ ๊ตฌํ๋ฉ๋๋ค.DSATUR
๊ฐ Brelaz์ ์ ํํ ๋ถ๊ธฐ ๋ฐ ๋ฐ์ธ๋ฉ๋DSATUR
์๊ณ ๋ฆฌ์ฆ์ ์๋ฏธํ๋ค๋ฉด ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋์น๊ณ ์์ผ๋ฉฐ ์ค์ ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค. ๋ํ PASS ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฐ์ ๊ฐ์ ๋ ๋ฒ์ ๋ ๋งค์ฐ ํ์ํฉ๋๋ค.