SG定理

SG定理

Nim游戏

\(n\)堆石头,每堆石头有\(a_i\)个,Alice和Bob轮流取走某一堆里的\(k\)个物品(\(1 \leq k \leq a_i\))

最后谁没有石子可以取,谁输掉游戏。

分析:若只有一堆石子,那么先手显然必胜。若有两堆石子,且开始时两堆石子的数量不同,那么先手每次操作可以将多的一堆石子取到与少的石子相同,那么由于后手每次操作后两堆石子的数量必不相等,那么后手必不可能获胜(若后手获胜,那么后手操作后两堆石子的数量同时为0)。

那么如何考虑\(n\)堆石子的情况呢??

定义Nim和:\(Nim(\vec{a})=a_1 \oplus a_2 \oplus \cdots \oplus a_n\)

那么我们有先手必败,当且仅当\(Nim=0\)直接说结论的我是屑

证明:首先,我们称先手必败点为\(P\)点(Previous,即上一次行动的人必胜),先手必胜点为\(N\)点(next,这一次行动的人必胜)。同时,对于每种状态,我们可以用一个\(n\)维向量\(\vec{a}\)表示这种状态。那么,状态的转移方法就能形式的表示为

\(\vec{a} \rightarrow \vec{a}- \vec{x},\ x_i \ge 0 且 \vec{x} \not= \vec{0},只存在一个x_i>0\)

我们容易推出,一种状态为\(P\)点等价于这种状态所能转移到的所有点都为\(N\)点,一种状态为\(N\)点等价于这种状态能够转移到的所有点中存在\(P\)点,并且,\(\vec{0}\)\(P\)点。那么显然,\(\vec{0}\)\(a_1 \oplus a_2 \oplus a_3 \oplus \dots \oplus a_n =0\)。对于任意一种状态\(\vec{a}\)且其对应的\(Nim\)和不为\(0\),我们设\(Nim(\vec{a})=k\),由于\(k=a_1 \oplus a_2 \oplus a_3 \oplus \dots \oplus a_n\),此时我们想找到一个\(a_j\),并且将其转化为\(a'_j\),使得\(a_1 \oplus a_2 \oplus a_3 \dots \oplus a'_j \oplus a_{j+1} \oplus \dots \oplus a_n=0\),则显然我们有\(a'_j=a_1 \oplus a_2 \oplus a_3\dots \oplus a_{j-1} \oplus a_{j+1} \oplus \dots \oplus a_n\)且我们希望\(a'_j<a_j\)

于是我们有\(a_i\)中必定有奇数个\(a_i\)的二进制位数在\(k\)的最高位上为\(1\),任取其中一个作为\(a_j\),有\(k \oplus a_j<a_j\)(因为\(k \oplus a_j\)相比\(a_j\)\(k\)的最高位少了一位,同时在\(k\)的最高位之前都相同),那么这就是一种合法操作。所以,必定有一种合法操作,使得对于任意\(\vec{a}\)\(Nim(\vec{a}) \not= 0\),转移到\(\vec{a'}\)\(\vec{a'}=(a_1,a_2,\dots,a_j \oplus k,a_{j+1},\dots,a_n)\))且\(Nim(\vec{a'})=0\).

而若\(\vec{a}\)\(Nim(\vec{a})\)\(0\),我们对于任意一种操作,其转移到的状态\(\vec{b}\)\(Nim(\vec{b})\)和必定都不为\(0\).(这里只能说显然?)

同时,这项游戏显然最后会决出胜负。(不存在平局)

那么我们有\(\vec{0}\)点的\(Nim=0\),且\(\vec{0}\)\(P\)点,同时\(Nim\)和满足,若\(\vec{a}\)\(Nim\)\(0\),则其转移到的状态的\(Nim\)必不为\(0\),而若其\(Nim\)为0,则其必定只能转移到\(Nim\)不为\(0\)的状态,那么我们通过第二类数学归纳法,设进行了\(n\)次操作以内的状态(就是通过\(n\)次以内能到达\(Nim=0\))满足\(Nim=0 \Leftrightarrow \vec{a} 为P点\ \ \ Nim \neq 0 \Leftrightarrow \vec{a}为N点\),那么对于需要通过\(n+1\)次操作到达\(0\)的点,必有其\(Nim\)值和\(P,N\)之间的关系保持一致(没错这里已经开始口胡了)。于是我们显然证毕。

解释:也就是说,若\(Nim\)和不为\(0\),那么先手玩家可以通过某种策略(这种策略在上述的证明已经给出)将\(Nim\)和变为\(0\),也就是说后手每次操作的状态必定\(Nim\)和为\(0\),而最后到达游戏结束时,必定是后手拿到\(\vec{0}\)这种状态,故先手必胜。

有向图游戏

有一个有向无环图\(G\)和一个棋子,棋子的初始位置在\(v_0\)处,Alice和Bob轮流操作棋子,将棋子从当前顶点转移到下一顶点(当然是有边指向的结点),当一名玩家不能进行任何操作时,此玩家 宣 布 败 北。

很显然,很多博弈问题都可以转化为有向图游戏或则有向图游戏构成的组合游戏,所以只要能处理有向图游戏的组合,那么基本上就算是解决了这些问题。于是乎我们有传说中的SG定理。

SG定理

\(Mex(S)\)函数

\(S\)为一个由非负整数构成的集合,则$Mex(S)=min{A} \ A= {x|\ x \in N \ 且 x \notin S } $

例如\(S=\{2,3,4,5\}\),\(Mex(S)=0\)

\(S=\{0,1,4,6,7\}\),\(Mex(S)=2\)

SG函数

\(v\)\(G\)中的一个顶点,\(a_1,a_2,a_3, \dots, a_n\)为其所能到达的点(若没有能到达的点则\(n=0\)

我们有\(SG(v)=\begin{cases} Mex\{SG(a_1),SG(a_2), \dots ,SG(a_n)\} & n \not= 0 \\ 0 & n=0 \end{cases}\)

有了SG函数,我们先考虑普通的有向图游戏,我们可以显然的发现,若\(v\)无法转移,则\(v\)\(P\)点,同时\(SG(v)=0\),那么我们合理猜测(没错很合理)

\(v为P点 \Leftrightarrow SG(v)=0 \\ v为N点 \Leftrightarrow SG(v) \not= 0\)

证明留作习题(笑)

下为不严谨的口胡证明,显然对于最后的终点(没有状态可以转移的点)此结论成立。那么我们对于一个不为终点的顶点\(v\),假设其所能到达的所有点都满足结论(这里就很不严谨),若\(SG(v)=0\),则其所能到达的所有点的SG值都不为\(0\),根据假设,其到达的点都为\(N\)点,因此\(v\)点为\(P\)点。而若\(SG(v) \not= 0\),那么\(v\)点必能到达一个SG值为\(0\)的点\(x\),根据假设\(x\)\(P\)点,故\(v\)\(N\)点。由数学归纳法(鬼个数学归纳法),结论证毕。

SG定理

那么考虑由\(n\)个有向图游戏所组成的组合游戏。我们设每个游戏的起点为\(v_1,v_2,v_3, \dots ,v_n\),那么我们有\

\(此点为P点 \Leftrightarrow SG(v_1) \oplus SG(v_2) \oplus SG(v_3) \oplus \dots \oplus SG(v_n)=0\)

(可以类比\(Nim\)游戏来理解)

证明:显然,若\(v_1,v_2,v_3, \dots,v_n\)全为终点,那么这种状态必为\(P\)点。而若\(SG(v_1) \oplus SG(v_2) \oplus SG(v_3) \oplus \dots \oplus SG(v_n)\not=0\),我们由\(SG\)函数的定义,可知对于\(v_i\),其可以转移到任何一个SG值严格小于\(SG(v_i)\)的值,那么我们类比上文中\(Nim\)游戏的证明,可以得出相同的结论。(没错和\(Nim\)游戏完全一样\(\dots\))

参考Blog

OI-wiki:博弈论 - OI Wiki (oi-wiki.org)

发现任何错误都欢迎锤我(请务必锤我\(M\)真是恶心呢)

posted @ 2021-08-07 20:30  sora_013  阅读(214)  评论(0编辑  收藏  举报