ํฌ์ŠคํŠธ

K-Graph Coloring

K-Graph Coloring

๐Ÿ’ซ K-Graph Coloring


๐Ÿซง Graph Coloring

์ •์ , ๊ฐ„์„ , ๋ฉด์„ ๊ธฐ์ค€์œผ๋กœ ์ธ์ ‘ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๊ฐ™์€ ์ƒ‰์ด ๋˜์ง€ ์•Š๋„๋ก ์น ํ•˜๋Š” ๋ฌธ์ œ

๊ฐ„์„ , ๋ฉด ์ฑ„์ƒ‰์ด ์ •์  ์ฑ„์ƒ‰์œผ๋กœ ๋ณ€ํ™˜ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋Œ€๊ฐœ ์ •์  ์ฑ„์ƒ‰์„ ์˜๋ฏธ

  • ๊ฐ„์„  ์ฑ„์ƒ‰ : ์„  ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•œ ์ •์  ์ฑ„์ƒ‰ ๋ฌธ์ œ๋กœ ๋ณ€ํ™˜๊ฐ€๋Šฅ
  • ๋ฉด ์ฑ„์ƒ‰ : ์ด์ค‘(Dual) ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•œ ์ •์  ์ฑ„์ƒ‰ ๋ฌธ์ œ๋กœ ๋ณ€ํ™˜๊ฐ€๋Šฅ
  • ๋ฃจํ”„๋ฅผ ๊ฐ–๋Š” ์ •์ ์€ ์ฑ„์ƒ‰์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋ฃจํ”„๊ฐ€ ์—†๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ๋Œ€์ƒ

๐Ÿซง K-Graph Coloring

์ตœ๋Œ€ k ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ƒ‰์„ ๊ฐ€์ง€๊ณ , ์ •์  ์ฑ„์ƒ‰์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒฐ์ • ๋ฌธ์ œ
๊ฐ€๋Šฅ ์—ฌ๋ถ€๋งŒ์„ ํ™•์ธ

์–ด๋–ค ์ƒ‰์ธ์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ƒ‰์„ ์ •์ˆ˜๋กœ ํ‘œํ˜„ (1, 2, 3)

๐Ÿซง ๊ทธ๋ž˜ํ”„์˜ ์ฑ„์ƒ‰์ˆ˜ (Chromatic Number)

๊ทธ๋ž˜ํ”„๋ฅผ ์ฑ„์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์†Œ๋กœ ํ•„์š”ํ•œ ์ƒ‰๊น”์˜ ์ˆ˜๋ฅผ ์•Œ์•„๋‚ด๋Š” ๋ฌธ์ œ

  • n์ •์  ์™„์ „ ๊ทธ๋ž˜ํ”„(๋ชจ๋“  ์ •์ ์ด ์—ฐ๊ฒฐ๋œ-์ธ์ ‘ํ•œ) : n
  • ํŠธ๋ฆฌ : 2
  • ๋‹จ์ˆœํ•œ ์ง€๋„ : 3์ƒ‰์ด๋ฉด ์ถฉ๋ถ„
    • ํ™€์ˆ˜๊ฐœ์˜ ์˜์—ญ์— ๋‘˜๋Ÿฌ์‹ธ์ธ ์˜์—ญ์ด ์žˆ๋‹ค๋ฉด : 4
    • ์ง€๋„๋ฅผ ๊ทธ๋ฆด ๋•Œ ๋‚˜๋ผ ๊ตฌ๋ถ„์„ ์ƒ‰์œผ๋กœ ํ•˜๋Š”๋ฐ, ๊ณผ๊ฑฐ ์ž‰ํฌ๊ฐ€ ๋น„์‹ธ์„œ ์ตœ์†Œํ•œ์˜ ์ƒ‰์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ ์ž

๐Ÿซง ์‘์šฉ

  • ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ์˜ ๋ ˆ์ง€์Šคํ„ฐ ํ• ๋‹น ๋ฌธ์ œ๋ฅผ ๋ชจ๋ธ๋ง
    • ๋ชฉ์  ์ฝ”๋“œ์˜ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•˜์—ฌ ์ฝ”๋“œ์ตœ์ ํ™”์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜๋Š” ์ปดํŒŒ์ผ๋œ ํ”„๋กœ๊ทธ๋žจ๋‚ด์˜ ์ž์ฃผ ์“ฐ์ด๋Š” ๊ฐ’์„ ์ด์™•์ด๋ฉด ๋น ๋ฅธ ๋ ˆ์ง€์Šคํ„ฐ์— ๋ฐฐ์ •
    • ๋ณ€์ˆ˜๋ฅผ ์ •์ ์œผ๋กœ, ๋™์‹œ์— ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋“ค ์‚ฌ์ด๋ฅผ ๊ฐ„์„ ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ„์„ญ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  k ์ƒ‰์œผ๋กœ ์ฑ„์ƒ‰ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์–ด๋–ค ๊ฒฝ์šฐ๋ผ๋„ ๋™์‹œ์— ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋“ค์„ ์ตœ๋Œ€ k ๊ฐœ์˜ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ ๊ฐ€๋Šฅ

์Šค๋„์ฟ  : 9-์ฑ„์ƒ‰ ๋ฌธ์ œ๋ฅผ 81์ •์  ๊ทธ๋ž˜ํ”„์— ์ ์šฉํ•˜๋Š” ๊ฒƒ

  • ๋‹ค์–‘ํ•œ ์Šค์ผ€์ค„๋ง ๋ฌธ์ œ
    • ๊ฐ ์ž‘์—…๋“ค์— ๋™์ผํ•œ ์‹œ๊ฐ„์„ ํ• ๋‹นํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ๊ฐ ์ž‘์—…์„ ์ •์ ์œผ๋กœ ํ•˜๊ณ , ๊ฒน์ณ์„œ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ž‘์—…๋“ค์„ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. ์ด ๊ทธ๋ž˜ํ”„๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ฑ„์ƒ‰์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค๋ฉด ์ด๋กœ๋ถ€ํ„ฐ ์ตœ์†Œ ์™„๋ฃŒ ์‹œ๊ฐ„์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ’ซ Solve By BackTracking


i.e. ์ง€๋„ ์ฑ„์ƒ‰ ๋ฌธ์ œ
๋ฉด ์ฑ„์ƒ‰ โ†’ ์ •์  ์ฑ„์ƒ‰, ๊ฐ ์˜์—ญ(์ •์ )์— 1 ~ n๊นŒ์ง€ ๋ฒˆํ˜ธ๋ฅผ ๋งค๊น€

๐Ÿซง ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ

์•„๋ฌด๊ฒƒ๋„ ์น ํ•˜์ง€ ์•Š์€ ๋น„์–ด์žˆ๋Š” ์ง€๋„์—์„œ ์ถœ๋ฐœ
๋ ˆ๋ฒจ i์˜ ๋…ธ๋“œ๋“ค์€ ์ •์  1์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ •์  i ๊นŒ์ง€ ์ฑ„์ƒ‰ํ•œ ์ƒํƒœ
๋‹จ๋ง ๋…ธ๋“œ์˜ ๋ ˆ๋ฒจ์€ ๋‹น์—ฐํžˆ n
์œ ๋งํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ํŒ๋ณ„: ์ธ์ ‘ํ•œ ์ •์ ์€ ๊ฐ™์€ ์ƒ‰์œผ๋กœ ์น ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค!!

@ KGC_0000, Start ๋…ธ๋“œ๋กœ ์‹œ์ž‘ํ•ด์„œ ๋‚ด๋ ค๊ฐ€๋Š”, ๊ฐ ๋…ธ๋“œ์—๋Š” (์ •์ , ์ƒ‰)์œผ๋กœ ๋งˆํ‚น๋œ ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ
@ KGC_0001, Start ๋…ธ๋“œ๋กœ ์‹œ์ž‘ํ•ด์„œ ๋‚ด๋ ค๊ฐ€๋Š”, ๊ฐ ๋…ธ๋“œ์—๋Š” (์ •์ , ์ƒ‰)์œผ๋กœ ๋งˆํ‚น๋œ, ์œ ๋งํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋Š” x๋กœ ํ‘œ์‹œํ•˜๊ณ  ํŒจ์Šคํ•œ, ์ตœ์ข… ์ƒํƒœ ๋…ธ๋“œ๊ฐ€ ํ‘œ์‹œ๋œ, ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ

๊ฐ€๋Šฅ ์—ฌ๋ถ€๋งŒ ์ฐพ์œผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ตœ์ข… ์ƒํƒœ ๋…ธ๋“œ๋ฅผ ์ฐพ์œผ๋ฉด ๋

๐Ÿซง ์•Œ๊ณ ๋ฆฌ๋“ฌ

Back-Tracking, ์‹ค์ œ๋กœ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค์ง€๋Š” ์•Š๊ณ , ๊ฐ ๋ ˆ๋ฒจ์— ํ•ด๋‹นํ•˜๋Š” ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.

  • ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ๊ธฐ์–ตํ•ด์•ผ ํ•  ์ •๋ณด๋Š” โ€œ๊ฑธ์–ด์˜จ ๊ธธโ€
    • ๋ ˆ๋ฒจ i ๋…ธ๋“œ๋Š” i ๊ฐœ์˜ ์ •์ ์˜ ์ƒ‰์„ ๊ธฐ์–ตํ•ด์•ผ ํ•จ
      • ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ ์œ ๋งํ•˜์—ฌ ์ž์‹ ๋…ธ๋“œ๋กœ ๋‚ด๋ ค๊ฐ„๋‹ค๋ฉด, ๋‹ค์Œ ๋‹จ๊ณ„์— i + 1๊ฐœ ์ •์ ์˜ ์ƒ‰์„ ๊ธฐ์–ต
      • ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ ์œ ๋งํ•˜์ง€ ์•Š์•„ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ๋˜๋Œ์•„๊ฐ„๋‹ค๋ฉด, ๋‹ค์Œ ๋‹จ๊ณ„์— i - 1๊ฐœ ์ •์ ์˜ ์ƒ‰์„ ๊ธฐ์–ต
์ธ๋ฑ์Šค123456789
์ƒ‰122312113

@ KGC_0002

  • ๋ฐฐ์—ด ์ธ๋ฑ์Šค : ์ •์ 
  • ๋ฐฐ์—ด ๊ฐ’: ํ•ด๋‹น ์ •์ ์„ ์น ํ•œ ์ƒ‰

โˆด n ๊ฐœ์˜ ์ƒ‰์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” 1์ฐจ์› ๋ฐฐ์—ด์ด ํ•„์š”

๐Ÿซง ๊ตฌํ˜„

ColoringBT(0) ์„ ํ˜ธ์ถœํ•จ์œผ๋กœ์จ ์‹œ์ž‘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
void ColoringBT(int i) // ๋…ธ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ ˆ๋ฒจ, ๋ ˆ๋ฒจ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ
{
	if (!Promising(i)) // ์œ ๋งํ•˜์ง€ ์•Š์œผ๋ฉด ํŒจ์Šค
		return;

	// ๋งˆ์ง€๋ง‰ ํ–‰์ด๋ฉด ๋
	// ์™œ ๋ฐ”๋กœ ๋์ด๋ƒ๋ฉด, ์œ ๋งํ•œ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฒ€์‚ฌ๋ฅผ ํ•˜๋‹ˆ๊นŒ (์œ„์—์„œ ๊ฒ€์‚ฌ)
	// + ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋งŒ ์ฐพ์œผ๋ฉด ๋˜๋‹ˆ๊นŒ
	if (i == n) 
	{
		OutputSolution(i);
		Exit(); // ๋Œ€์ถฉ ๋๋‚˜๋Š” ํ•จ์ˆ˜
	}
	// ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์ด ์•„๋‹ˆ๋ฉด
	// ์ž์‹ ๋…ธ๋“œ๋“ค์— ๋Œ€ํ•ด์„œ ๊ฒ€์‚ฌ
	else
	{
		for (int c = 1; c <= k; c++)
		{
			color[i + 1] = c;
			ColoringBT(i + 1);
		}
	}
}

bool Promising(int i)
{
	// ์œ ๋งํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
	// 1. ์ธ์ ‘ํ•˜๊ณ  : graph[i][j]
	// 2. ์ƒ‰์ด๊ฐ™์Œ : color[i] == color[j]
	for (int j = 0; j < i; j++)
	{
		if (graph[i][j] && color[i] == color[j])
			return false;
	}
	return true;
}

๐Ÿซง ๋ถ„์„

์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ์ˆ˜

\[1 + k + k^2 + ... + k^n = {(k^{n+1} - 1) \over (n-1)}\]

๊ฒฐ์ • ๋ฌธ์ œ์ด๊ณ  ํšจ์œจ์  ๊ฐ€์ง€์น˜๊ธฐ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ, ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ํฌ๋”๋ผ๋„, ์‹ค์ œ ๋ฐฉ๋ฌธ ๋…ธ๋“œ ์ˆ˜๋Š” ํ›จ์”ฌ ์ ์Œ
์•„์‹œ์•„ 46๊ฐœ๊ตญ๋งŒ์„ ๋Œ€์ƒ -> ์•ฝ 1.3 ร— 10^22

@ KGC_0001 ์˜ˆ์‹œ๋Š” ์ด 29,524๊ฐœ์˜ ๋…ธ๋“œ ๊ฐ€์šด๋ฐ 17๊ฐœ ๋…ธ๋“œ๋งŒ ๋ฐฉ๋ฌธ
@ ๊ฐ™์€ ๋…ธ๋“œ ์ˆ˜๋ผ๋„ ์—ฐ๊ฒฐ๋œ ๋ฐฉ์‹์ด ๋‹ค๋ฅด๋ฉด ์ „ํ˜€ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ด

์œ ๋งํ•œ ๋…ธ๋“œ ์ˆ˜

  • ํ•ด๋ฐ€ํ„ด ์‚ฌ์ดํด ๋ฌธ์ œ์ฒ˜๋Ÿผ ์œ ๋งํ•œ ๋…ธ๋“œ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†์Œ
  • ๊ฐ™์€ ๊ฐœ์ˆ˜์˜ ์ •์ ์ด๋ผ ํ•˜๋”๋ผ๋„ ์ž…๋ ฅ ๊ทธ๋ž˜ํ”„์— ๋”ฐ๋ผ ์œ ๋งํ•œ ๋…ธ๋“œ์˜ ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์ง
  • ์•„์ฃผ ๋นจ๋ฆฌ ํ•ด๋‹ต์„ ์–ป์„ ์ˆ˜๋„ ์žˆ๊ณ  ์ƒํƒœ ๊ณต๊ฐ„ ํŠธ๋ฆฌ๋ฅผ ๋ชจ๋‘ ๋’ค์ ธ์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Œ
์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.