樱序
发布于 2026-10-11 / 7 阅读
0
0

用SG定理解释Nim游戏

1.Sprague–Grundy 定理

定理叙述

设x,yx,y 是两个有限无偏组合游戏的状态, x+yx+y 表示它们的和游戏,即每一步只能在xx 或yy 中选择一个进行一次合法操作,而另一个保持不变。

那么

SG(x+y)=SG(x)⊕SG(y)\boxed{SG(x+y)=SG(x)\oplus SG(y)}

其中⊕\oplus 表示按位异或 XOR

SGSG函数指一次操作之后不能到达的状态的 SGSG函数的最小值

更一般地,对于有限个相互独立的游戏状态x1,x2,…,xnx_1,x_2,\ldots,x_n,

SG(x1+x2+⋯+xn)=SG(x1)⊕SG(x2)⊕⋯⊕SG(xn)\boxed{SG(x_1+x_2+\cdots+x_n)=SG(x_1)\oplus SG(x_2)\oplus\cdots\oplus SG(x_n)}

下面证明两个游戏的情形。多个游戏的结论可以通过反复应用两个游戏的结论得到。

定理证明

对于组合状态x+yx+y,一次合法操作只有两种可能:

1. 在xx 中进行一步操作x→ux\to u,得到u+yu+y;

2. 在yy 中进行一步操作y→vy\to v,得到x+vx+v。

因此,x+yx+y的所有后继状态组成集合

{u+y∣x→u}∪{x+v∣y→v}\{u+y\mid x\to u\}\cup\{x+v\mid y\to v\}

根据 SG 函数的定义,

SG(x+y)=mex⁡({SG(u+y)∣x→u}∪{SG(x+v)∣y→v})SG(x+y)=\operatorname{mex}\Big(\{SG(u+y)\mid x\to u\}\cup\{SG(x+v)\mid y\to v\}\Big)

下面证明这个 mex 恰好等于SG(x)⊕SG(y)SG(x)\oplus SG(y)。

使用数学归纳法

我们对组合状态距离终局的最大剩余步数进行归纳。

如果x+yx+y 已经是终局状态,那么x,yx,y 都没有合法后继状态,因此

SG(x)=SG(y)=SG(x+y)=0SG(x)=SG(y)=SG(x+y)=0

于是

SG(x+y)=0=0⊕0=SG(x)⊕SG(y)SG(x+y)=0=0\oplus0=SG(x)\oplus SG(y)

所以定理对终局状态成立。

现在假设定理对于所有比x+yx+y 更接近终局的组合状态都已经成立。

如果x→ux\to u,那么u+yu+y 是x+yx+y 的后继状态,因此根据归纳假设,

SG(u+y)=SG(u)⊕SG(y)SG(u+y)=SG(u)\oplus SG(y)

同理,如果y→vy\to v,则

SG(x+v)=SG(x)⊕SG(v)SG(x+v)=SG(x)\oplus SG(v)

所以

SG(x+y)=mex⁡({SG(u)⊕SG(y)∣x→u}∪{SG(x)⊕SG(v)∣y→v})SG(x+y)=\operatorname{mex}\Big(\{SG(u)\oplus SG(y)\mid x\to u\}\cup\{SG(x)\oplus SG(v)\mid y\to v\}\Big)

记

X=SG(x),Y=SG(y)X=SG(x),\qquad Y=SG(y)

并定义两个集合

A={SG(u)⊕Y∣x→u}A=\{SG(u)\oplus Y\mid x\to u\}
B={X⊕SG(v)∣y→v}B=\{X\oplus SG(v)\mid y\to v\}

于是

SG(x+y)=mex⁡(A∪B)SG(x+y)=\operatorname{mex}(A\cup B)

因此只需要证明

mex⁡(A∪B)=X⊕Y\boxed{\operatorname{mex}(A\cup B)=X\oplus Y}

根据 mex 的定义,只需要证明两件事:

1.X⊕Y∉A∪BX\oplus Y\notin A\cup B;

2. 对任意0≤W<X⊕Y0\leq W<X\oplus Y,都有W∈A∪BW\in A\cup B。

第一部分:证明X⊕Y∉A∪BX\oplus Y\notin A\cup B

首先证明

X⊕Y∉AX\oplus Y\notin A

任取一个xx 的后继状态uu,记

U=SG(u)U=SG(u)

因为

X=SG(x)=mex⁡{SG(u)∣x→u}X=SG(x)=\operatorname{mex}\{SG(u)\mid x\to u\}

根据 mex 的定义, xx本身不可能出现在xx 的后继状态的 SG 值中。

因此

U≠XU\neq X

假设

U⊕Y=X⊕YU\oplus Y=X\oplus Y

两边同时异或YY,得到

U⊕Y⊕Y=X⊕Y⊕YU=X\begin{aligned}U\oplus Y\oplus Y&=X\oplus Y\oplus Y\\U&=X\end{aligned}

这与U≠XU\neq X 矛盾。

所以

U⊕Y≠X⊕YU\oplus Y\neq X\oplus Y

由于这对于所有x→ux\to u 都成立,因此

X⊕Y∉AX\oplus Y\notin A

完全类似地,对于任意y→vy\to v,都有

SG(v)≠YSG(v)\neq Y

所以

X⊕SG(v)≠X⊕YX\oplus SG(v)\neq X\oplus Y

因此

X⊕Y∉BX\oplus Y\notin B

综上,

X⊕Y∉A∪B\boxed{X\oplus Y\notin A\cup B}

第二部分:证明对于所有W<X⊕YW<X\oplus Y,都有W∈A∪BW\in A\cup B

首先给出一个关于异或的引理。

引理

设a1,a2,…,ana_1,a_2,\ldots,a_n 为非负整数,并且

Z=a1⊕a2⊕⋯⊕an≠0Z=a_1\oplus a_2\oplus\cdots\oplus a_n\neq0

那么至少存在一个aia_i,使得

Z⊕ai<aiZ\oplus a_i<a_i

证明:

设kk 是ZZ 的最高非零位,即

Zk=1Z_k=1

因为

Z=a1⊕a2⊕⋯⊕anZ=a_1\oplus a_2\oplus\cdots\oplus a_n

所以在第kk 位上,

(a1)k⊕(a2)k⊕⋯⊕(an)k=1\left(a_1\right)_k\oplus\left(a_2\right)_k\oplus\cdots\oplus\left(a_n\right)_k=1

因此至少存在一个aia_i,满足

(ai)k=1\left(a_i\right)_k=1

由于kk 是ZZ 的最高非零位,所以异或ZZ 不会改变aia_i 中高于第kk 位的任何一位,而会把第kk 位从11 变为00。

因此

Z⊕ai<aiZ\oplus a_i<a_i

引理得证。

现在任取

0≤W<X⊕Y0\leq W<X\oplus Y

定义

Z=X⊕Y⊕WZ=X\oplus Y\oplus W

由于

W<X⊕YW<X\oplus Y

所以

W≠X⊕YW\neq X\oplus Y

从而

Z≠0Z\neq0

根据上面的引理,ZZ 异或X,Y,WX,Y,W 中至少一个时,会使这个数减小。

也就是说,下面三个不等式中至少有一个成立:

Z⊕X<XZ⊕Y<YZ⊕W<W\begin{aligned}Z\oplus X&<X\\Z\oplus Y&<Y\\Z\oplus W&<W\end{aligned}

但是

Z⊕W=(X⊕Y⊕W)⊕W=X⊕YZ\oplus W=(X\oplus Y\oplus W)\oplus W=X\oplus Y

而根据假设,

X⊕Y>WX\oplus Y>W

所以

Z⊕W>WZ\oplus W>W

因此第三种情况不可能发生。

所以前两种情况至少有一种成立,即

Z⊕X<XZ\oplus X<X

或

Z⊕Y<YZ\oplus Y<Y

由于XX 与YY 在整个证明中的地位完全对称,所以不妨设

Z⊕X<XZ\oplus X<X

展开得到

Z⊕X=(X⊕Y⊕W)⊕X=W⊕Y\begin{aligned}Z\oplus X&=(X\oplus Y\oplus W)\oplus X\\&=W\oplus Y\end{aligned}

因此

W⊕Y<XW\oplus Y<X

又因为

X=SG(x)=mex⁡{SG(u)∣x→u}X=SG(x)=\operatorname{mex}\{SG(u)\mid x\to u\}

根据 mex 的定义,所有小于XX 的非负整数都一定出现在xx 的后继状态的 SG 值中。

由于

W⊕Y<XW\oplus Y<X

所以必然存在一个后继状态x→ux\to u,使得

SG(u)=W⊕YSG(u)=W\oplus Y

于是

SG(u)⊕Y=(W⊕Y)⊕Y=W\begin{aligned}SG(u)\oplus Y&=(W\oplus Y)\oplus Y\\&=W\end{aligned}

根据归纳假设,

SG(u+y)=SG(u)⊕Y=WSG(u+y)=SG(u)\oplus Y=W

所以

W∈AW\in A

因此

W∈A∪BW\in A\cup B

Sprague–Grundy 定理得证。

推广到多个游戏

对于三个游戏,由刚刚证明的结论,

SG(x1+x2+x3)=SG((x1+x2)+x3)=SG(x1+x2)⊕SG(x3)=SG(x1)⊕SG(x2)⊕SG(x3)\begin{aligned}SG(x_1+x_2+x_3)&=SG((x_1+x_2)+x_3)\\&=SG(x_1+x_2)\oplus SG(x_3)\\&=SG(x_1)\oplus SG(x_2)\oplus SG(x_3)\end{aligned}

不断重复这个过程,可以得到对于任意有限个相互独立的无偏组合游戏,

SG(x1+x2+⋯+xn)=SG(x1)⊕SG(x2)⊕⋯⊕SG(xn)\boxed{SG(x_1+x_2+\cdots+x_n)=SG(x_1)\oplus SG(x_2)\oplus\cdots\oplus SG(x_n)}

为什么最终会出现 XOR

整个证明中最关键的地方是:

令

C=X⊕YC=X\oplus Y

我们证明了

C∉A∪BC\notin A\cup B

同时对于所有

0≤W<C0\leq W<C

都有

W∈A∪BW\in A\cup B

因此按照 mex 的定义,

C=mex⁡(A∪B)C=\operatorname{mex}(A\cup B)

也就是说,XOR 并不是人为规定的组合方式,而是它恰好满足 SG 函数所要求的 mex 结构:

mex⁡(A∪B)=X⊕Y\boxed{\operatorname{mex}(A\cup B)=X\oplus Y}

因此两个独立游戏组合以后,其 SG 值自然满足

SG(x+y)=SG(x)⊕SG(y)\boxed{SG(x+y)=SG(x)\oplus SG(y)}

回到nim游戏

观察到剩余的石子数目与SG函数完全同构

故证毕。


评论