公平组合游戏 ( I C G ) (ICG) (ICG)
1、将一个局面看作一个点,决策看作出边,则一个游戏就是一个 D A G DAG DAG 。
因为公平组合游戏具有有限性,所以无环。
在百度上对于 I C G ICG ICG 的抽象模型是这样的(棋子游戏): D A G DAG DAG 的根上有一个棋子,两名选手交替沿有向边移动棋子,无法移动者判负。
2、 N N N 和 P P P 分别代表先手必胜与必败
一个局面为 N N N 态的充要条件是有至少一条出边连接至 P P P 态。
一个局面为 P P P 态的充要条件是每一条出边都连接到 N N N 态。
3、 S G SG SG 函数
S G SG SG 函数是在棋子游戏的 D A G DAG DAG 上定义的(当然也可以当做在 I C G ICG ICG 游戏的局面上定义)。
E u E_{u} Eu 表示结点(局面) u u u 的出边。 m e x { S } mex\{S\} mex{S} 为集合 S S S 中未出现的最小非负整数。
定义: S G ( u ) = m e x { S G ( v ) ∣ v ∈ E u } SG(u)=mex\{SG(v)|v\in E_{u}\} SG(u)=mex{SG(v)∣v∈Eu}
显然当 E u = ∅ , S G ( u ) = 0 E_{u}=\empty,SG(u)=0 Eu=∅,SG(u)=0 。
下图是经典的一维跳棋的 S G SG SG 值:
4、 N i m Nim Nim 游戏
有 n n n 堆石子,两名选手轮流从任意一堆石子中取出任意多的石子。最终无法操作者判负。
容易发现一堆 x x x 个石子的 S G SG SG 函数值为 x x x 。即 S G ( x ) = x SG(x)=x SG(x)=x 。
为了方便书写,用 T T T 表示 ⊕ i = 1 n a i \oplus_{i=1}^{n}a_{i} ⊕i=1nai
结论:当 T = 0 T=0 T=0 时为 P P P 态,反之为 N N N 态。
证明这个结论,需要证明三个东西(即证明 I C G ICG ICG 游戏里 N , P N,P N,P 的充要条件成立):
1、当 a i a_{i} ai 全是0时( T = 0 T=0 T=0 )为 P P P 态。显然(这是边界)。
2、若当前局面的 T ≠ 0 T\neq 0 T=0 ( N N N ),则一定能转移到 T = 0 T=0 T=0 ( P P P )的局面。
对于这一条,考虑构造一次操作。既然 T ≠ 0 T\neq 0 T=0 ,那么 T T T 肯定在二进制表示下有最高位(设为第 k k k 位)的1。
这个1是由于奇数个**二进制表示下第 k k k 位为1的 a i a_{i} ai **计算异或和造成的。
那么想一想怎样才能转移到 T = 0 T=0 T=0 ,是让其中一堆由 a i a_{i} ai 变为 a i ⊕ T a_{i}\oplus T ai⊕T 。要求是 a i > a i ⊕ T a_{i}>a_{i}\oplus T ai>ai⊕T 。
我们发现,对于上述二进制表示下第 k k k 位为1的 a i a_{i} ai , a i > a i ⊕ T a_{i}>a_{i}\oplus T ai>ai⊕T 。
所以让这样的 a i a_{i} ai 去操作就可以了。
3、若当前局面的 T = 0 T=0 T=0 ( P P P ),则无法转移到 T = 0 T=0 T=0 ( P P P )的局面。
由于异或的性质,这一条同样显然。
得证。
根据这三条,可以画出一(半)张 N i m Nim Nim 游戏的 D A G DAG DAG :
5、游戏的和
有 n n n 个游戏,每轮玩家可以任选一个游戏进行一次决策,最后无法决策的人输。这个大游戏称为"游戏的和"。
S G SG SG 定理:两个游戏 u , v u,v u,v 构成的和的 S G = S G ( u ) ⊕ S G ( v ) SG=SG(u)\oplus SG(v) SG=SG(u)⊕SG(v) 。
证明:
按照棋子游戏,就是有 n n n 个棋子分别位于 n n n 张 D A G DAG DAG 的根上,两名选手交替沿有向边移动任意一个 D A G DAG DAG 上的棋子,无法移动者判负。
想要证明这个定理,肯定要先理解一下一直处于理论的 S G SG SG 函数的实际意义。
设 S G ( u ) = k SG(u)=k SG(u)=k 。这说明 m e x { S G ( u ) ∣ v ∈ E u } = k mex\{SG(u)|v\in E_u\}=k mex{SG(u)∣v∈Eu}=k ,也就是说对于任意 i ∈ [ 0 , k − 1 ] i\in [0,k-1] i∈[0,k−1] , u u u 都存在一个后继 v v v 使得 S G ( v ) = i SG(v)=i SG(v)=i ,要不然 S G ( u ) SG(u) SG(u) 就会等于 i i i 了。
N i m Nim Nim 游戏告诉我们,局面 u u u 的一个最优决策是将一个 a i a_{i} ai 改为 k k k ,而这个 k ∈ [ 0 , k − 1 ] k\in [0,k-1] k∈[0,k−1] 。
并且在 N i m Nim Nim 游戏中,一堆大小为 x x x 的石子的 S G SG SG 值是 x x x 。
这表明:如果将这 n n n 枚棋子所在结点的 S G SG SG 值看作 n n n 堆对应大小的石子,那么这个 N i m Nim Nim 游戏的每个策略都对应原来这 n n n 枚棋子的最优策略!
具体想想,设这 n n n 枚棋子所在结点的 S G SG SG 值为 ( a 1 , a 2 . . . a n ) (a_1,a_2...a_n) (a1,a2...an) ,设一个局面为 ( a 1 , a 2 . . . a n ) (a_1,a_2...a_n) (a1,a2...an) 的 N i m Nim Nim 游戏的最优决策是将 a j a_j aj 改为 k k k 。
那么原游戏的最优决策就是将第 j j j 个棋子移到 S G SG SG 值 = k =k =k 的后继v。
根据 N i m Nim Nim 游戏的结论,得证。
6、 A n t i _ N i m Anti\_Nim Anti_Nim 游戏
就是 N i m Nim Nim 游戏中最后操作的人失败。
用 T T T 表示 ⊕ i = 1 n a i \oplus_{i=1}^{n}a_{i} ⊕i=1nai
结论:1、当全部 a i = 1 a_{i}=1 ai=1 ,如果有奇数堆石子就为 P P P 态,有偶数堆则为 N N N 态。2、当至少一个 a i > 1 a_{i}>1 ai>1 , T ≠ 0 T\neq 0 T=0 时为 N N N 态,否则为 P P P 态。
证明1:显然。
证明2:
情况 A A A :若只有一个 a i > 1 a_{i}>1 ai>1 (此时 T T T 一定 ≠ 0 \neq 0 =0 ) ,则先手选择转移到全部 a i = 1 a_{i}=1 ai=1 的局面,并且先手可以在这次决策中控制转移后堆数的奇偶。故这种情况 是 N N N 态 。
情况 B B B :(不考虑 T T T 取值)有至少2个 a i > 1 a_{i}>1 ai>1 。
小情况 a a a : T ≠ 0 T\neq0 T=0 :通过 N i m Nim Nim 游戏可知一定能够转移到 T = 0 T=0 T=0 的局面(小情况 b b b )。
小情况 b b b : T = 0 T=0 T=0 :一方面可以转移到至少2个 a i > 1 , T ≠ 0 a_{i}>1,T\neq 0 ai>1,T=0 的局面,即 a a a 。另一方面随着游戏进行( a , b a,b a,b 循环),数量大于1的堆会逐渐减少,最终只剩一堆,这就变成了情况 A A A ,为 N N N 态。
观察情况 B B B , b b b 能给对面 N N N 态或至少2个 a i > 1 , T ≠ 0 a_{i}>1,T\neq 0 ai>1,T=0 的局面,而 a a a 仅能给对面 T = 0 T=0 T=0 的局面。所以在情况 B B B 下,小情况 b b b 为 N N N 态, a a a 为 P P P 态。也就是说当至少2个 a i > 1 , T ≠ 0 a_{i}>1,T\neq 0 ai>1,T=0 时为N态,否则为 P P P 态。
综合情况 A A A 和情况 B B B 的结论,2得证。
综上,1和2皆得证。结论得证。
Bash博弈
在 N i m Nim Nim 上增加每次取不超过 m m m 的限制。
一堆大小 x x x 的石子的 S G ( x ) = x m o d ( m + 1 ) SG(x)=x\ mod\ (m+1) SG(x)=x mod (m+1)
阶梯Nim
有 n n n 堆石子,每次可以从第 i i i 堆的石子中拿走一部分放到第 i − 1 i-1 i−1 堆中,或者把第1堆中的石子拿走一部分,无法操作者判负。
画一个两级台阶,每堆有2个石子的 D A G DAG DAG :
游戏的 S G SG SG :第1级有 a 1 a_{1} a1 个石子,以 a 1 = 3 a_1=3 a1=3 为例,得出 S G ( a 1 ) = a 1 SG(a_1)=a_1 SG(a1)=a1 。
第2级有 a 2 a_2 a2 个石子,以 a 2 = 2 , a 1 = 1 a_2=2,a_1=1 a2=2,a1=1 为例:
以上都是废话。但是能从一个例子观察 S G SG SG 函数。
为了方便,用偶堆表示位于偶数下标的石子堆,奇堆亦然。
结论:就是在奇堆玩 N i m Nim Nim 游戏的结论。
换句话说,阶梯 N i m Nim Nim 的 N P NP NP 态取决于奇堆的异或和。
证明:
假设当前奇堆的 N i m Nim Nim 游戏是 N N N 态,那么先手就在奇堆上玩 N i m 游戏 Nim游戏 Nim游戏 。
这样一来,后手要么是跟着先手玩 N i m Nim Nim 游戏(取奇堆),但是这样对于后手来说是必败的。
后手要不然就从偶堆取一些石子降到奇堆来打破先手的计谋。
但是在这种方案下,先手仍然可以把后手从偶堆扔向奇堆的石子再扔一次让它们回到偶堆。
这样操作之后的奇堆局面和后手操作前的奇堆局面是相等的,也就是把难题再次抛向了后手。
最终在奇堆的 N i m Nim Nim 游戏下先手拿完全部奇堆,只有偶堆了,这是新一阶段的游戏。
这就轮到后手作为新一阶段游戏的先手了,接下来的"先手""后手"都在新一轮游戏意义下。
这时我们想证明只有偶堆的情况下是 P P P 态!
这很好证。
先手第一步只能选择从偶堆移到奇堆,那么后手的策略是把此时被先手移出来的唯一一堆奇堆石子移回偶堆。
这样下去,最终由后手将唯一存在石子的 a 1 a_1 a1 删除。
所以只有偶堆时是 P P P 态。
当前奇堆的 N i m Nim Nim 游戏是 P P P 态的话就反过来操作。
得证。