Sprague-Grundy Theorem

tktj12·2024년 5월 22일
0
post-custom-banner

2명의 플레이어가 게임을 진행하고, 순차적, 완전 정보, 공정, 노멀 플레이, 유한 상태, loopfree인 게임일 때의 필승법에 대한 정리이다.

  • 순차적 게임 : 바둑, 체스같이 상대 행동이 모두 끝나면 내 차례가 온다.
  • 완전 정보 게임 : 바둑, 체스처럼 모든 정보가 공개되어있다. 포커는 완전 정보 게임이 아니다.
  • 공정 게임 : 플레이어에 상관 없이 게임의 상태에 의해서만 할 수 있는 행동이 정해진다. 체스는 플레이어가 움직일 수 있는 말이 다르므로 공정 게임이 아니다.
  • 노멀 플레이 : 할 수 있는 행동이 없는 플레이어가 패배한다.
  • 유한 상태 : 플레이어가 할 수 있는 행동이 항상 유한하다.
  • loopfree : 같은 상태가 2번 이상 나타나지 않는다. 체스는 loopfree가 아니다.

Nim Game

1개 이상의 더미에 돌이 쌓여있고, 두 명에서 플레이어가 번갈아가며 돌을 제거해나가는 게임이다. 돌을 제거할 땐 하나의 더미에서 한 개 이상의 돌을 제거해야만 한다. 마지막 돌을 제거한 사람이 이기는 게임이다. 위의 조건들을 모두 만족한다.


그런디 수

그런디 수는 0,1,2,...*0, *1, *2, ... 처럼 별표와 00 이상의 정수로 표시된다.
그런디 수는 더미가 한 개인 님 게임에서의 돌의 개수를 나타낸다. 즉, n*n은 님 게임에서 더미가 하나 있고, 돌이 nn개 쌓여있는 상태를 나타낸다.
그런디 수는 nimber라고도 부른다.


행동 집합

행동 집합(a set of options)을 현재 상태에서 해당 차례의 플레이어가 취한 행동에 따라 바뀌는, 가능한 모든 상태(position)들의 집합으로 정의하자.
현재 상태에서 플레이어의 선택으로 게임을 0,1*0, *1중 하나의 상태로 만들 수 있을 때, 게임의 상태 GG를 다음과 같이 행동 집합으로 표현할 수 있다.
G={0,1}G = \{*0, *1\}
GG는 사실상 2*2와 같다. 어떤 그런디 수 n*n은 다음을 만족한다.
n={0,1,2,...,(n1)}*n = \{*0, *1, *2, ..., *(n-1)\}


행동 집합의 덧셈

같은 게임의 두 행동 집합 AABB를 합쳐 하나의 게임으로 진행할 수 있다. 이를 A+BA+B라고 표현한다. 예를 들어 님 게임에서 돌이 3개 쌓인 더미(3*3)와 돌이 5개 쌓인 더미(5*5)를 합쳐 진행할 수 있다. 행동 집합의 합 A+BA + B 를 아래와 같이 재귀적으로 표현할 수 있다.
A+B={A+b  bB}{a+B  aA}A+B=\{A+b \ | \ b\in B\} \cup \{a+B \ | \ a\in A\}

행동 집합의 덧셈은 교환법칙과 결합법칙이 성립한다.


P\mathcal{P}-position과 N\mathcal{N}-position

2명의 플레이어가 게임을 진행하고, 순차적, 완전 정보, 공정, 노멀 플레이, 유한 상태, loopfree인 게임의 모든 행동 집합은 P\mathcal{P}-position과 N\mathcal{N}-position으로 나눌 수 있다. P\mathcal{P}-position은 이전(다음) 차례의 사람이 무조건 이길 수 있는 행동 집합이고, N\mathcal{N}-position은 이번 차례의 사람이 무조건 이길 수 있는 행동 집합이다.

노멀 플레이에서 0*0P\mathcal{P}-position이고, 이외에는 전부 N\mathcal{N}-position이다.




정의 1.

두 행동 집합 AA, BB가 임의의 행동 집합 GG에 대해 A+GA+G, B+GB+G 모두 P\mathcal{P}-position이거나 N\mathcal{N}-position으로 같을 경우 ABA \approx B 라고 쓰자. 이때, AABB를 동등하다고 말한다.



정리 1.

행동 집합 AAP\mathcal{P}-position이면 임의의 행동 집합 GG에 대해 GA+GG \approx A+G이다.

임의의 행동 집합 HH에 대해 G+HG+HA+G+HA+G+H가 둘 다 P\mathcal{P}-position이거나 N\mathcal{N}-position임을 증명하면 된다.

증명 1. G+HG + HP\mathcal{P}-position일 때

AAP\mathcal{P}-position이므로 상대방은 AAG+HG+H에서 모두 승리 전략을 구사하여 무조건 이길 수 있다. 따라서 A+G+HA+G+H또한 P\mathcal{P}-position이다.

증명 2. G+HG + HN\mathcal{N}-position일 때

G+HG+H에서 P\mathcal{P}-position으로 이동하여 (G+H)(G+H)'로 만들자. A+(G+H)A+(G+H)'는 증명 1과 같이 P\mathcal{P}-position이다. 따라서 A+G+HA+G+HN\mathcal{N}-position이다.



정리 2.

AB    A+BA \approx B \iff A+BP\mathcal{P}-position

증명 1. ABA+BA \approx B \Rightarrow A+BP\mathcal{P}-position

ABA \approx B 이므로 A+AA+AA+BA+B는 둘 다 N\mathcal{N}-position이거나 P\mathcal{P}-position이다. 그런데 A+AA+A는 똑같은 게임 두 개를 갖다놓고 하기 때문에 한쪽에서 내가 어떻게 두든 상대방이 반대쪽에서 나와 똑같은 행동을 하면 마지막에 돌을 가져가는 건 상대방이다. 따라서 A+AA+AP\mathcal{P}-position이고 A+BA+B 또한 P\mathcal{P}-position이다.

증명 2. ABA+BA \approx B \Leftarrow A+BP\mathcal{P}-position

A+BA+BP\mathcal{P}-position이면 정리 1에 의해 AA+A+BA \approx A+A+B 이다. 그리고 A+AA+AP\mathcal{P}-position이기 때문에 또한 정리 1에 의해 BA+A+BB \approx A+A+B 이다. 따라서 ABA \approx B 이다.



정리 3.

행동 집합 G={G1,G2,...,Gk}G = \{G_1, G_2, ..., G_k\} 의 각 원소 GiG_i 와 동등한 그런디 수를 ni*n_i라고 할 때, 행동 집합 G={n1,n2,...,nk}G'=\{*n_1,*n_2,...,*n_k\} 은(는) GG 와 동등하다.

증명

행동 집합 G+GG+G' 이(가) P\mathcal{P}-position이라면 정리 2에 의해 GGG \approx G' 이다.

G+GG+G'에서 내가 GG를 골라서 GiG_i로 이동하면 상대는 GG'에서 ni*n_i로 이동할 수 있다. GiniG_i \approx *n_i 이므로 정리 2에 의해서 Gi+niG_i + *n_i 은(는) P\mathcal{P}-position이다. 내가 GG'을 고르는 경우에도 마찬가지이다. 따라서 G+GG+G' 은(는) P\mathcal{P}-position이다.



정리 4.

G={n1,n2,...,nk}G'=\{*n_1,*n_2,...,*n_k\} 은(는) 행동 집합이다. 집합 {n1,n2,...,nk}\{n_1,n_2,...,n_k\}에 속하지 않는 가장 작은 음이 아닌 정수(minimum excluded value, mex)를 mm이라고 할 때, GmG' \approx *m이다.

증명

행동 집합 G+mG' + *m 이(가) P\mathcal{P}-position이라면 정리 2에 의해 GmG' \approx *m 이다.

GG'가 공집합이면 m=0m = 0 이고, m=0*m = *0 또한 공집합이므로 G+mG' + *m 은(는) P\mathcal{P}-position이다.
GG'가 공집합이 아니라면, 나는 GG'에서 ni*n_i로 이동할 수 있다. ni<mn_i < m 이라면 상대방은 m*m에서 ni*n_i로 이동하여 ni+ni*n_i + *n_i로 만들 수 있다. 이는 P\mathcal{P}-position이다. ni>mn_i > m 라면 상대방은 ni*n_i에서 m*m으로 이동하여 m+m*m + *m으로 만들 수 있다. 이 또한 P\mathcal{P}-position이다.
m>0m > 0 라면, m*m이 공집합이 아니므로 나는 GG'대신 m*m을 선택할 수 있다. 하지만 mm의 정의에 따라 m*m에서 어떤 선택을 하던 상대방이 GG'에서 같은 상태로 만들 수 있고, 내 차례는 P\mathcal{P}-position이다. 따라서 G+mG' + *m 은(는) P\mathcal{P}-position이다.



정리 5.

abc=0    a \oplus b \oplus c = 0 \iff 행동 집합 a+b+c*a + *b + *c 은(는) P\mathcal{P}-position

여기서 \oplus 연산은 binary XOR을 뜻한다. 조합 게임 이론에선 nim-sum이라고 부른다.

증명

ss를 다음과 같이 정의하자.
s=a1a2...ans = a_1 \oplus a_2 \oplus ... \oplus a_n (ai0a_i \ge 0)

ss에서 임의의 ak>0a_k > 0를 골라서 aka_k보다 작고, 0이상으로 만들자. 이것을 다음과 같이 정의하자.
t=b1b2...bnt = b_1 \oplus b_2 \oplus ... \oplus b_n
iki \ne k 라면 ai=bia_i = b_i이다.

따라서,
t=0tt = 0 \oplus t
=(ss)t=(s \oplus s) \oplus t
=s(st)=s \oplus (s \oplus t)
=s((a1a2...an)(b1b2...bn))=s \oplus ((a_1 \oplus a_2 \oplus ... \oplus a_n) \oplus (b_1 \oplus b_2 \oplus ... \oplus b_n))
=s((a1b1)(a2b2)...(anbn))=s \oplus ((a_1 \oplus b_1) \oplus (a_2 \oplus b_2) \oplus ... \oplus (a_n \oplus b_n))
=s(00...(akbk)...0)=s \oplus (0 \oplus 0 \oplus ... \oplus (a_k \oplus b_k) \oplus ... \oplus 0)
=s(akbk)=s \oplus (a_k \oplus b_k)

s=0s = 0 이면 t0t \ne 0 이다.

akbk0a_k \oplus b_k \ne 0 이다. 그렇지 않다면,
ak=ak0a_k = a_k \oplus 0
=ak(akbk)= a_k \oplus (a_k \oplus b_k)
=(akak)bk= (a_k \oplus a_k) \oplus b_k
=bk= b_k
이므로 모순이다.
따라서,
t=s(akbk)t = s \oplus (a_k \oplus b_k)
=0(akbk)= 0 \oplus (a_k \oplus b_k)
=akbk= a_k \oplus b_k
0\ne 0

s0s \ne 0 이면 t=0t = 0 으로 만들 수 있다.

ss를 이진수로 표현했을 때, 최상위 비트를 2x2^x 이라고 하자. \oplus 연산의 특성 때문에 2x2^x이 포함된 aka_k 또한 반드시 존재한다. aka_kbkb_k로 바꾸자. bk=sakb_k = s \oplus a_k 이다. ss의 최상위 비트(2x2^x)가 사라지므로 bk<akb_k < a_k 을(를) 만족한다.

따라서,
t=s(akbk)t = s \oplus (a_k \oplus b_k)
=s(ai(sai))= s \oplus (a_i \oplus (s \oplus a_i))
=(ss)(aiai)= (s \oplus s) \oplus (a_i \oplus a_i)
=0= 0

내 차례에 nim-sum이 00 이고 상대방이 필승법을 알고 있다면, 나는 계속 nim-sum이 0일 것이다. 언젠간 내 행동 집합은 공집합(0*0, 이또한 nim-sum이 0임)이 될 것이다. 따라서 nim-sum이 0인 상태는 P\mathcal{P}-position이고, nim-sum이 0이 아니라면 nim-sum을 0으로 무조건 만들 수 있으므로 N\mathcal{N}-position이다.



정리 6.

음이 아닌 정수 nnmm에 대하여 다음이 성립한다. n+m(nm)*n + *m \approx *(n \oplus m)

증명

nm(nm)=0n \oplus m \oplus (n \oplus m) = 0
\therefore 정리 5에 의해 n+m+(nm)*n + *m + *(n \oplus m) 은(는) P\mathcal{P}-position이다.
\therefore 정리 2에 의해 n+m(nm)*n + *m \approx *(n \oplus m)




따라서 (앞서 서술한 조건의) 여러 게임을 동시에 진행하는 경우에도 스프라그-그런디 정리를 이용하면 누가 이기는지 쉽게 알 수 있다. 즉, 정리 4를 이용하여 각 게임과 동등한 그런디 수를 구하고, 그것들의 nim-sum이 0인 사람이 패배한다.






참고 자료

profile
C++, 알고리즘 공부
post-custom-banner

1개의 댓글

comment-user-thumbnail
2024년 6월 15일

안녕하세요! 같은 학교 4학년 재학중인 학우인데, 연락처가 없어서 댓글로 남깁니다.
ucpc, icpc 팀원을 구하고 있는데, 혹시 관심 있으시면 dongbin1999@gmail.com으로 메일 하나만 보내주세요!

답글 달기