Jgrapht: ๊ทธ๋ž˜ํ”„ ์ƒ‰์ƒ ๊ตฌํ˜„ ๊ฐœ์„ (Brelaz DFS ๋“ฑ)

์— ๋งŒ๋“  2019๋…„ 04์›” 18์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: jgrapht/jgrapht

ํ•™๊ต ํ”„๋กœ์ ํŠธ์˜ ์ผํ™˜์œผ๋กœ ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ๊ฐˆ์ƒ‰ ๊ทธ๋ž˜ํ”„ ์ƒ‰์น  ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์†๋„๋ฅผ ๋†’์ด๊ฑฐ๋‚˜ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์ž‘์—…ํ•ด ์™”์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋” ๋น ๋ฅธ ๋ฒ„์ „์˜ Brown ๊ณ ์œ  ์•Œ๊ณ ๋ฆฌ์ฆ˜, Brelaz DSATUR ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐ PASS ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ตœ๋Œ€ ํŒŒ๋ฒŒ์„ ๋ฏธ๋ฆฌ ์ฑ„์ƒ‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ํด๋ฆฌํฌ ์™ธ๋ถ€์˜ ์ •์ ์— ์—ฐ๊ฒฐ๋˜๋Š” ๊ฐ€์žฅ์ž๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ์ตœ๋Œ€ ํด๋ฆฌํฌ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ถ”๊ฐ€ ํด๋ฆฌํฌ ํŒŒ์ธ๋”๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ทธ๋ž˜ํ”„ ์ „์ฒ˜๋ฆฌ(์ƒ‰์ˆ˜์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ๊ผญ์ง“์  ์ œ๊ฑฐ)๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ œ๊ฑฐ๋œ ์ •์ ์€ ๋‚˜์ค‘์— ์˜ฌ๋ฐ”๋ฅธ ์ƒ‰์ƒ์œผ๋กœ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ถœ๋ ฅ์€ ์ƒ‰์ˆ˜์™€ ๋™์ผํ•œ ์–‘์˜ ์ƒ‰์ƒ์„ ์‚ฌ์šฉํ•˜๋Š” ์™„์ „ํ•œ ์ƒ‰์ƒ์˜ ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ JGrapht ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํ†ตํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹น์‹ ์ด ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ๋งŒํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ํ™•์‹คํžˆ ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ณผ๊ฑฐ ๊ฒฝํ—˜์— ๋น„์ถ”์–ด ๋ณผ ๋•Œ ๊ธฐ์—ฌ๋ฅผ ์ž‘์€ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ๊ฒ€ํ† ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ pull-request ๋Œ€์‹  ์ž‘๊ณ  ์ž˜ ๋ฌธ์„œํ™”๋˜๊ณ  ์ž์ฒด์ ์œผ๋กœ ํฌํ•จ๋œ pull-request๋ฅผ ์ œ์ถœํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€, ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์š•์‹ฌ ๋งŽ์€ ์ƒ‰์น  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐœ๊ฒฌ์  DSATUR ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ SaturationDegreeColoring ํด๋ž˜์Šค์—์„œ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

DSATUR ๊ฐ€ Brelaz์˜ ์ •ํ™•ํ•œ ๋ถ„๊ธฐ ๋ฐ ๋ฐ”์ธ๋”ฉ๋œ DSATUR ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์˜๋ฏธํ•œ๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๋†“์น˜๊ณ  ์žˆ์œผ๋ฉฐ ์‹ค์ œ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ PASS ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ฐ™์€ ๊ฐœ์„ ๋œ ๋ฒ„์ „๋„ ๋งค์šฐ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  5 ๋Œ“๊ธ€

ํ™•์‹คํžˆ ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ณผ๊ฑฐ ๊ฒฝํ—˜์— ๋น„์ถ”์–ด ๋ณผ ๋•Œ ๊ธฐ์—ฌ๋ฅผ ์ž‘์€ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ๊ฒ€ํ† ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ 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
  • ์„ธ ๊ฐ€์ง€ ์ƒ‰์ƒ ์ง€์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜ + ๊ธฐ๋ณธ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋Š” ํ•˜๋‚˜์˜ PR.

๋‘ ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ฐฉ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ƒ์„ฑ์ž ์ธ์ˆ˜๋กœ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์›ํ•˜๋Š” clique ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. Function<Graph<V,E>, CliqueAlgorithm<V>> ๊ฐ™์€ ๊ฒƒ์ด ํŠธ๋ฆญ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ๋ช…๋ช… ์ฒด๊ณ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” BaseBacktrackColoring, BrownBacktrackColoring, PassBacktrackColoring, DsaturBacktrackColoring ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์˜๊ฒฌ์„ ๋ณด๋‚ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๋„๋ก ๋…ธ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€, ํ˜„์žฌ ์šฐ๋ฆฌ์˜ clique ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ•˜๋‚˜์˜ ์ตœ๋Œ€ clique(์ฆ‰, ๊ฐ€์žฅ ๋งŽ์ด ๊ฒฐํ•ฉ๋œ ์ •์ ์ด ์žˆ๋Š” ํ•˜๋‚˜)๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์‚ฐ์„ ๋” ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ ๋‹จ์ผ ํด๋ฆฌํฌ์˜ ์‚ฌ์ „ ์ƒ‰์น ์—๋งŒ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŒŒ๋ฒŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋”ฐ๋ผ ๋ชจ๋“  ์ตœ๋Œ€ ํŒŒ๋ฒŒ ์„ธํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•œ ๋‹ค์Œ MaximalCliqueEnumerationAlgorithm ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ผ๋ถ€๋กœ ๋งŒ๋“ค๊ฒ ์Šต๋‹ˆ๊นŒ?

MaximalCliqueEnumerationAlgorithm ๋Š” "์ตœ๋Œ€"๋ฅผ ์—ด๊ฑฐํ•˜์ง€๋งŒ ๋ฐ˜๋“œ์‹œ "์ตœ๋Œ€" ํŒŒ๋ฒŒ์ด ์•„๋‹Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

๊ตฌํ˜„์—์„œ ์ตœ๋Œ€ ํŒŒ๋ฒŒ์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ CliqueAlgorithm ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Pattabiraman et al.์˜ ๋…ผ๋ฌธ์„ ๊ฐ„๋žตํžˆ ์‚ดํŽด๋ณธ ํ›„ ์ฒซ ๋ฒˆ์งธ ์ €์ž๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. PPGLCMaximumCliqueFinder ์™€ ๊ฐ™์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ Javadoc์— ์ ์ ˆํ•œ ์ฐธ์กฐ๋„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰