文章目录
- 平等博弈
- nim堆
- SG定理
- nim和
- 常见的公平博弈模型
- bash博弈
- nim博弈
- nim-k博弈
- wythoff博弈
- 扩展wythoff博弈
- fibonacci博弈
- 阶梯博弈
- green hackenbush
- Misère Nim博弈
- Every-SG
- nim积
- 翻棋子游戏
- 游戏的积,tartan定理
平等博弈
G={L∣R},L=RG=\{L|R\},L=RG={L∣R},L=R,所以一般简写成 G={L}G=\{L\}G={L}。
即在平等博弈中左右手玩家的可操作方法是相同的。
显然 G+G=0G+G=0G+G=0,因为把当前的游戏复制一份,后手就可以模仿先手的动作,从而后手必胜。
所以 G=0or G∣∣0G=0\ \text{or}\ G||0G=0 or G∣∣0。
即,公平博弈要么先手必胜要么后手必胜,不区分左右手。
一些数学化的表达与之前的非平等博弈含义一样:
- GGG 是一个游戏局面。
- LLL 是左手玩家操作后的可能后继局面。
- RRR 是右手玩家操作后的可能后继局面。
- G∣∣0G||0G∣∣0 表示先手必胜。
- G=0G=0G=0 表示后手必胜。
nim堆
∗n*n∗n 游戏,即石子数为 nnn 的一个 nim\text{nim}nim 堆。
显然有 ∗n={0,∗,∗2,...,∗(n−1)}(n≥1)∣∣0*n=\{0,*,*2,...,*(n-1)\}\ (n\ge 1)||0∗n={0,∗,∗2,...,∗(n−1)} (n≥1)∣∣0。
因为只有一堆,先手直接拿完即可。
SG定理
若 GGG 是有限状态的公平博弈,G={∗a,∗b,...}G=\{*a,*b,...\}G={∗a,∗b,...} ,则该博弈等价为 G=∗nG=*nG=∗n,其中 n=mex(a,b,...)n=\text{mex}(a,b,...)n=mex(a,b,...)。
证明:
G+G=0⇔G=−G⇒G+G=0\Leftrightarrow G=-G\RightarrowG+G=0⇔G=−G⇒ 只需要证明 G=∗n⇔∗n−G=0⇒G+∗n=0G=*n\Leftrightarrow *n-G=0\Rightarrow G+*n=0G=∗n⇔∗n−G=0⇒G+∗n=0【看作两个公平博弈游戏的当前局面,一个为 GGG ,一个为 nnn 个石子数的 nim\text{nim}nim 堆】
即证明这种新博弈游戏是后手必胜的。
考虑先手的操作:
- 如果先手操作 ∗n*n∗n,将其变为 ∗m(m<n)*m\ (m<n)∗m (m<n),那么后手可以操作 GGG,将 GGG 变成 ∗m*m∗m。
- 如果先手操作 GGG
- 将其变为 ∗m(m<n)*m\ (m<n)∗m (m<n),那么后手也可以将 ∗n*n∗n 变成 ∗m*m∗m。
- 将其变为 ∗m(m>n)*m\ (m>n)∗m (m>n),那么后手也可以把 ∗m*m∗m 变成 ∗n*n∗n。
- 但先手不能将 GGG 变为 ∗n*n∗n,因为 GGG 的后继局面中没有 ∗n*n∗n。
石子数一直在减小所以不会有环的情况,后手一定是有对应先手的操作方法,所以后手必胜。
若 GGG 是有限状态的公平博弈,G={A,B,C,...}G=\{A,B,C,...\}G={A,B,C,...},那么存在一个 nnn,使得 G=∗nG=*nG=∗n。
GGG 这个有限状态的博弈构成了一个 DAG
。
那么 DAG
没有出度的点就是 0⇒n=00\Rightarrow n=00⇒n=0。
用 归纳法
,假设存在 a,b,c,...a, b, c,...a,b,c,... 使得 A=∗a,B=∗b,C=∗c,...A=*a, B=*b, C=*c,...A=∗a,B=∗b,C=∗c,...。
那么 G={∗a,∗b,∗c,...}=∗nG=\{*a, *b, *c, ...\}=*nG={∗a,∗b,∗c,...}=∗n,其中 n=mex(a,b,c,...)n=\text{mex}(a, b, c, ...)n=mex(a,b,c,...)。
说明任意有限状态的公平博弈和 nnn 个石子的 nim\text{nim}nim 堆等价。
nim和
存在一个 nnn ,使得 ∗a+∗b=∗n*a+*b=*n∗a+∗b=∗n。其中 n=axor bn=a\ \text{xor}\ bn=a xor b。
证明:
n=a⊕bn=a\oplus bn=a⊕b【此等号的意思是“记作”,⊕\oplus⊕ 就是 nim和
的意思】
G=∗a+∗b={∗a′+∗b,∗b′+∗a}(a′<a,b′<b)G=*a+*b=\{*a'+*b,*b'+*a\}\ (a'<a,b'<b)G=∗a+∗b={∗a′+∗b,∗b′+∗a} (a′<a,b′<b)。
由 SG定理
得 n=mex(a′⊕b,b′⊕a)n=\text{mex}(a'\oplus b,b'\oplus a)n=mex(a′⊕b,b′⊕a)。
所以只需要证明 mex(a′⊕b,b′⊕a)=axor b\text{mex}(a'\oplus b,b'\oplus a)=a\ \text{xor}\ bmex(a′⊕b,b′⊕a)=a xor b。
当 a=b=0a=b=0a=b=0 时,0⊕0=mex(∅)=0=0xor 00\oplus 0=\text{mex}(\empty)=0=0\ \text{xor}\ 00⊕0=mex(∅)=0=0 xor 0【可以理解为初始局面没有一个石子,先手无法操作,所以后手必胜】
用 归纳法
,证明 mex(a′xor b,axor b′)=axor b\text{mex}(a'\ \text{xor}\ b,a\ \text{xor}\ b')=a\ \text{xor}\ bmex(a′ xor b,a xor b′)=a xor b 即可。
继续转化为证明 axor ba\ \text{xor}\ ba xor b 不在集合 {a′xor b,axor b′}\{a'\ \text{xor}\ b,a\ \text{xor}\ b'\}{a′ xor b,a xor b′} 中,且比 axor ba\ \text{xor}\ ba xor b 小的所有自然数都在集合 {a′xor b,axor b′}\{a'\ \text{xor}\ b,a\ \text{xor}\ b'\}{a′ xor b,a xor b′} 中。
-
axor ba\ \text{xor}\ ba xor b 不在集合中
·
反证法
,假设 ∃x<axxor b=axor b\exist_{x<a}\ x\ \text{xor}\ b=a\ \text{xor}\ b∃x<a x xor b=a xor b。则有,xxor bxor b=axor bxor b⇒x=ax\ \text{xor}\ b\ \text{xor}\ b=a\ \text{xor}\ b\ \text{xor}\ b\Rightarrow x=ax xor b xor b=a xor b xor b⇒x=a,矛盾。
假设 ∃x<bxxor a=axor b\exist_{x<b}\ x\ \text{xor}\ a=a\ \text{xor}\ b∃x<b x xor a=a xor b ,同理。
-
比 axor ba\ \text{xor}\ ba xor b 小的所有自然数都在集合 {a′xor b,axor b′}\{a'\ \text{xor}\ b,a\ \text{xor}\ b'\}{a′ xor b,a xor b′} 中。
设 ∀x<axor bx∈{a′xor b,axor b′}\forall_{x<a\ \text{xor}\ b}\ x\in\{a'\ \text{xor}\ b,a\ \text{xor}\ b'\}∀x<a xor b x∈{a′ xor b,a xor b′},y=axor bxor xy=a\ \text{xor}\ b\ \text{xor}\ xy=a xor b xor x。
考虑将 a,b,xa,b,xa,b,x 分别异或上yyy。
yyy 最高位的 111 必然来自于 a/b/xa/b/xa/b/x 其中一个,也可能是三个都有。
所以 a/b/xa/b/xa/b/x 三个数分别异或 yyy 后,至少有一个数要变小。
但是这个数肯定不可能是 xxx,因为 xxor y=axor b>xx\ \text{xor}\ y=a\ \text{xor}\ b>xx xor y=a xor b>x,矛盾。
不妨设 axor y=bxor x<aa\ \text{xor}\ y=b\ \text{xor}\ x<aa xor y=b xor x<a,那么 x=bxor xxor b∈x=b\ \text{xor}\ x\ \text{xor}\ b\inx=b xor x xor b∈ 集合 {a′xor b}\{a'\ \text{xor}\ b\}{a′ xor b}。
由于 xxx 的任意性,证毕。
常见的公平博弈模型
bash博弈
nnn 个物品,每次至少取一个,最多取m个,先取光的胜。
因为一轮总可以两个玩家一起取 m+1m+1m+1 个。
所以如果 nnn 是 m+1m+1m+1 的倍数,那么后手必能先取光。
否则,先手可以第一次取 n%(m+1)n\%(m+1)n%(m+1) 个,然后设后手取 xxx 个,先手第二轮以后就取 m+1−xm+1-xm+1−x 个。
当然也可以直接用 SG定理
算。
nim博弈
nnn 堆石子,每次可以选一堆石子任意拿,最少拿一颗,先取光的胜。
每一堆石子就是 ∗ai*a_i∗ai,nnn 堆石子等价于 111 堆石子,个数为这 nnn 堆石子的异或和。
当且仅当异或和为 000 时后手必胜。
nim-k博弈
nnn 堆石子,每次可以选最少 111 堆,不超过 kkk 堆石子,在这些堆石子里面任意拿,每堆最少拿一颗,先取光的胜。
把这 nnn 堆石子的数量转成二进制,然后在每一位上加起来,如果每一位都是 k+1k+1k+1 的倍数,那么后手胜,否则先手胜。
具体证明因为以前写过,就不再赘述!
可以把 nim-k博弈
认为是一个高维的 nim和
。
nim-k博弈
是一个有限状态的公平游戏,所以当然可以由 SG定理
,化简成 ∗n*n∗n 的形式。
但是只有是否等于 000 的时候有规律,其他时候 nnn 的取值没有明显的规律。
所以一般只能定性研究 nim-k博弈
,很难研究含有 nim-k博弈
的组合游戏。
由于可以看作是高维的 nim和
。所以 ∗n*n∗n 的游戏都可以在同时操作 kkk 个游戏的意义下组合起来。
如 bash-k博弈
:nnn 堆石子,每次可以选最少 111 堆,不超过 kkk 堆石子,在这些堆石子里面任意拿,每堆最少拿一颗,最多拿 rrr 颗,先取光的胜。
单独来看,每堆石子是一个 bash博弈
,游戏的值是 ∗(ai(modr+1))*(a_i\pmod{r+1})∗(ai(modr+1))。
再把这 nnn 堆石子用 nim-k
的方式组合起来,所以就是把 ai(modr+1)a_i\pmod {r+1}ai(modr+1) 变成二进制,然后每一位加起来,如果每一位都是 k+1k+1k+1 的倍数,则后手赢,否则先手赢。
wythoff博弈
有 222 堆石子,每人每次可以拿走任意一堆中任意数量的石子 或 在两堆石子中拿走相同数量的石子,不能拿的人输。
同样地,wythoff博弈
的值没有明显的规律,只有为 000 的位置 (x,y)(x,y)(x,y) 有规律:
xi=mex{xj,yj∣j<i},yi=xi+ix_i=\text{mex}\Big\{x_j,y_j\Big|j<i\Big\},y_i=x_i+ixi=mex{xj,yj∣∣∣j<i},yi=xi+i。
前几个为 000 的位置:(0,0),(1,2),(3,5),(4,7),(6,10)(0,0),(1,2),(3,5),(4,7),(6,10)(0,0),(1,2),(3,5),(4,7),(6,10)。【两个位置分别代表一堆的剩余石子数】
以 (4,7)(4,7)(4,7) 举例说明,(0,0)(1,2)(3,5)(0,0)(1,2)(3,5)(0,0)(1,2)(3,5) 生成的集合 {0,1,2,3,5}\{0,1,2,3,5\}{0,1,2,3,5} 的 mex=4\text{mex}=4mex=4,这是第三个【从零开始编号】,所以 +3+3+3。
当不算 (0,0)(0,0)(0,0) 时,可以发现 xi,yix_i,y_ixi,yi 就是正整数集的一个分割。
由 betty定理
:
设 α,β\alpha,\betaα,β 为正无理数,且 1α+1β=1\frac{1}{\alpha}+\frac{1}{\beta}=1α1+β1=1。
令 A={⌊αn⌋∣n∈N+},B={⌊βn⌋∣n∈N+}A=\{\lfloor\alpha n\rfloor\Big|n\in N^+\},B=\{\lfloor\beta n\rfloor\Big|n\in N^+\}A={⌊αn⌋∣∣∣n∈N+},B={⌊βn⌋∣∣∣n∈N+},则 A⋂B=∅∧A⋃B=N+A\bigcap B=\empty\wedge A\bigcup B=N^+A⋂B=∅∧A⋃B=N+。
套用 betty定理
,xi=⌊αi⌋,yi=⌊βi⌋=⌊αi⌋+i=⌊(α+1)i⌋x_i=\lfloor\alpha i\rfloor,y_i=\lfloor\beta i\rfloor=\lfloor\alpha i\rfloor+i=\lfloor(\alpha+1) i\rfloorxi=⌊αi⌋,yi=⌊βi⌋=⌊αi⌋+i=⌊(α+1)i⌋。
解出 β=α+1⇒α=1+52\beta=\alpha+1\Rightarrow \alpha=\frac{1+\sqrt{5}}{2}β=α+1⇒α=21+5。
这样就得到了为 000 的位置的通项了,(⌊1+52i⌋,⌊3+52i⌋)(\lfloor\frac{1+\sqrt{5}}{2}i\rfloor,\lfloor\frac{3+\sqrt{5}}{2}i\rfloor)(⌊21+5i⌋,⌊23+5i⌋)。
扩展wythoff博弈
有 222 堆石子,每人每次可以拿走任意一堆中任意数量的石子 或 在两堆石子中数量差 ≤k\le k≤k 的石子,不能拿的人输。
xi=mex{xj,yj∣j<i},yi=xi+(k+1)ix_i=\text{mex}\Big\{x_j,y_j\Big|j<i\Big\},y_i=x_i+(k+1)ixi=mex{xj,yj∣∣∣j<i},yi=xi+(k+1)i。
仍然是套用 betty定理
。
fibonacci博弈
111 堆石子有 nnn 个,两人轮流取。先取者第 111 次可以取任意多个,但不能全部取完。
以后每次取的石子数不能超过上次取子数的 222 倍,取完者胜。
若 nnn 是斐波那契数,那么先手必败,否则必胜。
证明:
实际上先手一次取的石子数目一定 <13n<\frac{1}{3}n<31n,否则后手可在下一步一次性取完。这将是以下证明的基石。
斐波那契数的情形,首先 f(1)=2,f(2)=3f(1)=2,f(2)=3f(1)=2,f(2)=3 的情形先手必败。
用 归纳法
。【根据斐波那契以及不等式的转化可得出以下关系式】
{f(n)=f(n−1)+f(n−2)f(n−1)<2f(n−2)<f(n)(1)3f(n−2)>f(n)(2)4f(n−2)<3f(n+1)(3)\begin{cases}f(n)=f(n-1)+f(n-2)\\ f(n-1)<2f(n-2)<f(n)\ \quad (1)\\ 3f(n-2)>f(n)\quad\quad\ \quad\quad\quad\quad (2)\\ 4f(n-2)<3f(n+1)\quad\quad\quad\quad(3)\end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧f(n)=f(n−1)+f(n−2)f(n−1)<2f(n−2)<f(n) (1)3f(n−2)>f(n) (2)4f(n−2)<3f(n+1)(3)
由 (2)(2)(2) 得先手不能一次取超过 f(n−2)f(n-2)f(n−2) 的石子。
那么基于更小情况的归纳假设可知 f(n−2)f(n-2)f(n−2) 是必败局面。
所以后手可以控制其自己石子与之抗衡,使得后手拿走 f(n−2)f(n-2)f(n−2) 的最后一个石子。
接下来只剩 f(n−1)f(n-1)f(n−1) 个石子了。
基于 (2)(3)(2)(3)(2)(3) 可以知道先手仍然无法一次性拿完 f(n−1)f(n-1)f(n−1)。
由归纳假设可得也是后手取到 f(n−1)f(n-1)f(n−1) 这堆石子的最后一颗。
所以先手是必败的。
非斐波那契数的情形,由 Zeckendorf定理
,任何正整数可以表示为若干个不连续的斐波那契数之和。
当 nnn 不是斐波那契数时,n=f(a1)+f(a2)+...f(ap)(p≥1∧a1>a2>…>ap)n=f(a_1)+f(a_2)+...f(a_p)\quad (p\ge 1\wedge a_1>a_2>…>a_p)n=f(a1)+f(a2)+...f(ap)(p≥1∧a1>a2>…>ap)
根据 (1)(1)(1) 先手总能直接拿掉最小的数 f(ap)f(a_p)f(ap)。后手就会陷入先手必败的情形中。所以先手必胜。
阶梯博弈
相当于奇数阶梯的 nim\text{nim}nim 堆的和。
将阶梯倒着排列成一行。发现两个棋子之间的空格数就是阶梯上的石子数。
最高阶只能将石子往下移,所以只能变少,对应地在一行的最左边,当最左边黄棋左移时对应石子下放的操作。
看奇数阶梯是因为,偶数段操作时,虽然短暂性地让后面一段变长,但是另一个人可以相应的操作后一段。而这个可操作距离也是有限的。
也就是说,如果 G=∗nG=*nG=∗n,虽然 GGG 也能到 ∗x(x>n)*x\ (x>n)∗x (x>n),但大于 nnn 的这种 xxx 的数量是有限的,后手总可以变回去。
green hackenbush
-
链的情形:一条长度为 nnn 的链相当于一个大小为 nnn 的 nim\text{nim}nim 堆。
-
树的情形
对连接点而言,就是将连接点的各个子游戏进行 nim\text{nim}nim 求和。
由于子游戏都是 ∗a*a∗a 形式,所以求和出来的结果就是 nim\text{nim}nim 和。
∗:∗n=∗(n+1)*:*n=*(n+1)∗:∗n=∗(n+1)
-
环的情况
一个自环相当于一个叶子,任何环内的点都可以融合成一个点,且不会改变游戏的结果。
所以奇环可以简化为一条边,偶环可以简化为一个点。
Misère Nim博弈
取走最后一个石子的人算输,其余规则与普通 nim博弈
完全一样。
先手必胜的条件:
- 每堆石子数异或和为 000 且每堆石子只有 111 个。
- 每堆石子数异或和不为 000 且至少有一堆石子的个数 >1>1>1。
定性分析:
先手必胜的条件
- 游戏和为 000 且单个游戏的 SGSGSG 函数 ≤1\le 1≤1。
- 游戏和不为 000 且至少有一个单一游戏的 SGSGSG 函数 >1>1>1。
定量分析:
若 GGG 是有限状态的 Misère
的公平博弈,G={∗a,∗b,∗c,...}G=\{*a, *b, *c, ...\}G={∗a,∗b,∗c,...}(∗a,∗b,∗c*a, *b, *c∗a,∗b,∗c 这些游戏的规则也都是Misère
的),且存在一个 ∗x∈G(x<2)*x∈G(x<2)∗x∈G(x<2),那么 GGG 可以化简成 ∗n*n∗n,其中 n=mex(a,b,c,...)n=\text{mex}(a, b, c, ...)n=mex(a,b,c,...)。
推论:若 GGG 可以写成 ∗n*n∗n 的形式,那么 G+∗G+*G+∗ 可以写成 ∗(n⊕1)*(n\oplus 1)∗(n⊕1) 的形式。
普通的公平博弈:G=∗nG=*nG=∗n 表示的是 G+∗nG+*nG+∗n 的组合游戏中,后手必胜。
Misère
的公平博弈:定义函数 n=sg−(G)n=sg^-(G)n=sg−(G),也表示 G+∗nG+*nG+∗n 的组合游戏中,后手必胜。
sg−(0)=1sg-(0)=1sg−(0)=1。
设 G={A,B,C,...},sg−(G)=mex(sg−(A),sg−(B),sg−(C),...)G=\{A, B, C, ...\},sg^-(G)=\text{mex}(sg^-(A), sg^-(B), sg^-(C), ...)G={A,B,C,...},sg−(G)=mex(sg−(A),sg−(B),sg−(C),...)。
注意:由于博弈是公平的,所以有 G=−GG=-GG=−G,但 Misère Game
中 G=−GG=-GG=−G 却推不出 G+G=0G+G=0G+G=0。
如 {∗2}+{∗2}\{*2\}+\{*2\}{∗2}+{∗2} 是后手必胜。
要注意化简和组合游戏后手必胜的区别。
在普通公平游戏中,两者无区别,在 Misère Game
中,是有区别的。
后手必胜+后手必胜 或 先手必胜+先手必胜 可能是先手必胜也可能是后手必胜。
Every-SG
是一些游戏的组合。玩家对于每个可以操作的游戏都必须要操作,不能操作的人输。
由于每个可以操作的游戏都必须要操作,所以对于每个单个可以赢的游戏都尽可能赢。
但问题的关键是让能赢的游戏尽可能长的玩下去,并且不能赢的游戏尽快输掉。
因为整个游戏是看最后一个谁不能操作,而不是看谁的单一游戏胜利次数更多。
站在先手的角度考虑:先计算每个状态的输赢情况(或者 SGSGSG 值是否为 000 )然后计算步数。
- 对 G=0G=0G=0 的游戏 G={A,B,C,...}G=\{A, B, C, ...\}G={A,B,C,...},先手必败,所以想最快输掉,就计算 step(G)=min{step(A),step(B),step(C),...}+1step(G)=\min\{step(A), step(B), step(C), ...\}+1step(G)=min{step(A),step(B),step(C),...}+1。
- 对 G>0G>0G>0 的游戏 G={A,B,C,...}G=\{A, B, C, ...\}G={A,B,C,...},先手必胜,所以想拖时间,就计算 step(G)=max{step(A),step(B),step(C),...}+1(A=B=C=...=0)step(G)=\max\{step(A), step(B), step(C), ...\}+1\quad(A=B=C=...=0)step(G)=max{step(A),step(B),step(C),...}+1(A=B=C=...=0)。
- 终止状态的 step=0step=0step=0。
Every-SG游戏
中先手必胜当且仅当单个游戏中最大的 step\text{step}step 值为奇数。
nim积
超现实数的乘法定义:xy={xLy+xyL−xLyL,xRy+xyR−xRyR∣xLy+xyR−xLyR,xRy+xyL−xRyL}xy=\{x_Ly+xy_L-x_Ly_L,x_Ry+xy_R-x_Ry_R\ |\ x_Ly+xy_R-x_Ly_R,x_Ry+xy_L-x_Ry_L\}xy={xLy+xyL−xLyL,xRy+xyR−xRyR ∣ xLy+xyR−xLyR,xRy+xyL−xRyL}。
例如 x−xL>0,y−yL>0⇒(x−xL)(y−yL)=xy−xLy−xyL+xLyL>0⇒xy>xLy+xyL−xLyLx-x_L>0,y-y_L>0\Rightarrow (x-x_L)(y-y_L)=xy-x_Ly-xy_L+x_Ly_L>0\Rightarrow xy>x_Ly+xy_L-x_Ly_Lx−xL>0,y−yL>0⇒(x−xL)(y−yL)=xy−xLy−xyL+xLyL>0⇒xy>xLy+xyL−xLyL
同理可得其余式子。
仿照超现实数乘法的定义,可以形式化地写出 nimber
的乘法定义:
∗a×∗b={∗a’×∗b+∗a×∗b’+∗a’×∗b’}(a’<a,b’<b)*a×*b=\{*a’×*b+*a×*b’+*a’×*b’\}\ (a’<a, b’<b)∗a×∗b={∗a’×∗b+∗a×∗b’+∗a’×∗b’} (a’<a,b’<b)。
【因为平等游戏没有 L,RL,RL,R 区分,所以超现实数的四个式子是一样的,且平等游戏中 +/−+/-+/− 是没有区别的。】
由 SG定理
得,∃n=a⊗b∗n=∗a×∗b\exist_{n=a\otimes b}\ *n=*a\times *b∃n=a⊗b ∗n=∗a×∗b。【⊗\otimes⊗ 含义是“nim积”】
关于 nnn 具体的计算,先打个小范围的表:
a\b | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
2 | 0 | 2 | 3 | 1 | 8 | 10 | 11 | 9 | 12 | 14 | 15 | 13 | 4 | 6 | 7 | 5 |
3 | 0 | 3 | 1 | 2 | 12 | 15 | 13 | 14 | 4 | 7 | 5 | 6 | 8 | 11 | 9 | 10 |
4 | 0 | 4 | 8 | 12 | 6 | 2 | 14 | 10 | 11 | 15 | 3 | 7 | 13 | 9 | 5 | 1 |
5 | 0 | 5 | 10 | 15 | 2 | 7 | 8 | 13 | 3 | 6 | 9 | 12 | 1 | 4 | 11 | 14 |
6 | 0 | 6 | 11 | 13 | 14 | 8 | 5 | 3 | 7 | 1 | 12 | 10 | 9 | 15 | 2 | 4 |
7 | 0 | 7 | 9 | 14 | 10 | 13 | 3 | 4 | 15 | 8 | 6 | 1 | 5 | 2 | 12 | 11 |
8 | 0 | 8 | 12 | 4 | 11 | 3 | 7 | 15 | 13 | 5 | 1 | 9 | 6 | 14 | 10 | 2 |
9 | 0 | 9 | 14 | 7 | 15 | 6 | 1 | 8 | 5 | 12 | 11 | 2 | 10 | 3 | 4 | 13 |
10 | 0 | 10 | 15 | 5 | 3 | 9 | 12 | 6 | 1 | 11 | 14 | 4 | 2 | 8 | 13 | 7 |
11 | 0 | 11 | 13 | 6 | 7 | 12 | 10 | 1 | 9 | 2 | 4 | 15 | 14 | 5 | 3 | 8 |
12 | 0 | 12 | 4 | 8 | 13 | 1 | 9 | 5 | 6 | 10 | 2 | 14 | 11 | 7 | 15 | 3 |
13 | 0 | 13 | 6 | 1 | 9 | 4 | 15 | 2 | 14 | 3 | 8 | 5 | 7 | 10 | 1 | 12 |
14 | 0 | 14 | 7 | 9 | 5 | 11 | 2 | 12 | 10 | 4 | 13 | 3 | 15 | 1 | 8 | 6 |
15 | 0 | 15 | 5 | 10 | 1 | 14 | 4 | 11 | 2 | 13 | 7 | 8 | 3 | 12 | 6 | 9 |
根据表,可以找到几个性质:
- 0⊗x=00\otimes x=00⊗x=0
- 1⊗x=x1\otimes x=x1⊗x=x
- a⊗b=b⊗aa\otimes b=b\otimes aa⊗b=b⊗a
- (a⊗b)⊗c=a⊗(b⊗c)(a\otimes b)\otimes c=a\otimes (b\otimes c)(a⊗b)⊗c=a⊗(b⊗c)
nim积
对nim和
具有乘法分配律:a⊗(b⊕c)=a⊗b⊕a⊗ca\otimes (b\oplus c)=a\otimes b\oplus a\otimes ca⊗(b⊕c)=a⊗b⊕a⊗c
另外还有一些常见性质:
若 n=22n(n≥0)n=2^{2^n}(n\ge 0)n=22n(n≥0),即 nnn 是一个 fermat powers of 2
。【n=2,4,16...n=2,4,16...n=2,4,16...】 则有
- 当 x<nx<nx<n 时,有 n⊗x=n×xn\otimes x=n\times xn⊗x=n×x。
- n⊗n=32nn\otimes n=\frac{3}{2}nn⊗n=23n。
- 当 a,b<na,b<na,b<n 时,有 a⊗b<na\otimes b<na⊗b<n。
因此,对于 a⊗ba\otimes ba⊗b 的计算,我们可以将 aaa 和 bbb 拆成一些 222 的次幂的 nim和
,利用分配律转为计算 a′⊗b′a′\otimes b′a′⊗b′,其中 a′a′a′ 和 b′b′b′ 都是 222 的次幂。
然后再把 a′a′a′ 和 b′b′b′ 拆成一些 fermat powers of 2
的 nim\text{nim}nim 乘积利用结合律计算即可。
例如:8⊗4=2⊗4⊗4=2⊗6=2⊗(2⊕4)=2⊗2⊕2⊗4=3⊕8=118\otimes 4=2\otimes 4\otimes 4=2\otimes 6=2\otimes(2\oplus 4)=2\otimes 2\oplus 2\otimes 4=3\oplus 8=118⊗4=2⊗4⊗4=2⊗6=2⊗(2⊕4)=2⊗2⊕2⊗4=3⊕8=11。
定理:对于某个非负整数 nnn,以及 S={x∣x∈N,x<22n}S=\{x|x\in N,x<2^{2^n}\}S={x∣x∈N,x<22n},(S,⊗,⊕)(S,\otimes,\oplus)(S,⊗,⊕) 构成一个特征为 222 的域。
nnn 个单位元相加 =0=0=0,符合这样条件的域称为特征为 nnn 的域。
而我们比较熟悉的数域单位元是 111,无论多少个单位元 111 相加都不可能为 000,所以数域是特征为 000 的域。
一般强调特征为 222 的域就是说两个一样的数相加等于 000 的时候,不能直接认为这两个数等于 000。
因为在特征为 222 的域上两个单位元相加也是 000。
所以可以用类似 karatsuba
的方法来推导 nim积
。
设 a=a1⊗P⊕a2,b=b1⊗P⊕b2a=a_1\otimes P\oplus a_2,b=b_1\otimes P\oplus b_2a=a1⊗P⊕a2,b=b1⊗P⊕b2,其中 PPP 是一个 fermat powers of 2
。
则 a⊗b=a1⊗b1⊗P⊗P⊕a2⊗b2⊕(a1⊗b2⊕a2⊗b1)⊗Pa\otimes b=a_1\otimes b_1\otimes P\otimes P\oplus a_2\otimes b_2\oplus(a_1\otimes b_2\oplus a_2\otimes b_1)\otimes Pa⊗b=a1⊗b1⊗P⊗P⊕a2⊗b2⊕(a1⊗b2⊕a2⊗b1)⊗P。
因为 a1,a2,b1,b2<Pa_1,a_2,b_1,b_2<Pa1,a2,b1,b2<P,所以 a1⊗b2⊕a2⊗b1<Pa_1\otimes b_2\oplus a_2\otimes b_1<Pa1⊗b2⊕a2⊗b1<P。
P⊗P=32PP\otimes P=\frac{3}{2}PP⊗P=23P,拆成 12+1\frac{1}{2}+121+1。
变为 a⊗b=a1⊗b1⊗(P2)⊕a2⊗b2⊕(a1⊗b1⊕a1⊗b2⊕a2⊗b1)×Pa\otimes b=a_1\otimes b_1\otimes (\frac{P}{2})\oplus a_2\otimes b_2\oplus(a_1\otimes b_1\oplus a_1\otimes b_2\oplus a_2\otimes b_1)\times Pa⊗b=a1⊗b1⊗(2P)⊕a2⊗b2⊕(a1⊗b1⊕a1⊗b2⊕a2⊗b1)×P。
因为 a1⊗b2⊕a2⊗b1=(a1⊗a2)⊗(b1⊗b2)⊕a1⊗b1⊕a2⊗b2a_1\otimes b_2\oplus a_2\otimes b_1=(a_1\otimes a_2)\otimes(b_1\otimes b_2)\oplus a_1\otimes b_1\oplus a_2\otimes b_2a1⊗b2⊕a2⊗b1=(a1⊗a2)⊗(b1⊗b2)⊕a1⊗b1⊕a2⊗b2。
所以 a⊗b=a1⊗b1⊗(P2)⊕a2⊗b2⊕((a1⊗a2)⊗(b1⊗b2)⊕a2⊗b2)×Pa\otimes b=a_1\otimes b_1\otimes (\frac{P}{2})\oplus a_2\otimes b_2\oplus\Big((a_1\otimes a_2)\otimes(b_1\otimes b_2)\oplus a_2\otimes b_2\Big)\times Pa⊗b=a1⊗b1⊗(2P)⊕a2⊗b2⊕((a1⊗a2)⊗(b1⊗b2)⊕a2⊗b2)×P
P2\frac{P}{2}2P 虽然不是一个 fermat powers of 2
,但仍然是 222 的幂。
所以递归下去每次只需做 333 次折半乘法,只考虑这部分复杂度是 karatsuba
的复杂度,即 O((n2)log23)=O(nlog233)O((\frac n2)^{log_2^3})=O(\frac{n^{log_2^3}}{3})O((2n)log23)=O(3nlog23) 的。
所以 T(n)=3T(n2)+O(nlog233)=O(m∗3m)T(n)=3T(\frac{n}2)+O(\frac{n^{log_2^3}}{3})=O(m*3^m)T(n)=3T(2n)+O(3nlog23)=O(m∗3m),其中 m=log nm=\text{log}\ nm=log n。
最简单的就是记忆化搜索,小范围存一个表。
稍微复杂一点的是,这个域存在原根,[0,65536)[0,65536)[0,65536) 的最小的原根是 258(224=65536)258(2^{2^4}=65536)258(224=65536)。
所以可以打 [0,65536)[0,65536)[0,65536) 范围内的指数、对数表。
这样只用递归一次即可算出 nim积
,约等于 O(1)O(1)O(1) 的复杂度。
∗a×∗b={∗a’×∗b+∗a×∗b’+∗a’×∗b’}(a’<a,b’<b)*a×*b=\{*a’×*b+*a×*b’+*a’×*b’\} (a’<a, b’<b)∗a×∗b={∗a’×∗b+∗a×∗b’+∗a’×∗b’}(a’<a,b’<b) 组合博弈的意义:
考虑一个二维的棋盘,有黑色棋子和白色棋子摆满了棋盘。
每次可以选一个黑色棋子,假设坐标是 (a,b)(a,b)(a,b),那么可以任选一个 (a’,b’)(a’,b’)(a’,b’),翻转 (a,b),(a’,b’),(a,b’),(a’,b)(a,b),(a’,b’),(a,b’),(a’,b)(a,b),(a’,b’),(a,b’),(a’,b) 这四枚棋子的颜色。
不能操作的人输。
如果只有一枚黑色棋子 (a,b)(a,b)(a,b),那么这个游戏的值就是 ∗a×∗b*a×*b∗a×∗b。
如果有很多枚黑色棋子,就是每个棋子分别算 ∗ai×∗bi*a_i×*b_i∗ai×∗bi 然后再 nim\text{nim}nim 加起来。
翻棋子游戏
有 nnn 枚棋子排成一排,有些棋子是黑色的,有些是白色的。
两个人轮流操作,每次操作将一些 限定的集合 中的棋子颜色反转。
但必须保证反转的棋子的集合中最右边的一枚一开始一定是黑色的。
显然翻棋子游戏是公平的无环的博弈,所以可以用 SG定理
定量算。
对于这一类游戏,有一个定理(不一定是一维的):
某一个局面的 SGSGSG 值,等于局面中每个黑色棋子单一存在时的局面的 SGSGSG 值的 nim\text{nim}nim 和。
我们可以考虑把翻转的操作当作加一个相同的 copycopycopy。
因为在 nim\text{nim}nim 和的定义下两个相同数的 nim\text{nim}nim 和是0,可以发现这两种方式是等价的。
也就是说每个位置的 SGSGSG 值是独立的。
游戏的积,tartan定理
如果我们把两个一维的翻棋子游戏 AAA 和 BBB 结合到一起,表示所选的行应该遵从翻棋子游戏 AAA 中的规定,所选的列应该遵从翻棋子游戏 BBB 中的规定。
那么我们把这个游戏叫做一个 tartan game
,用 A×BA×BA×B 表示。
形式化地讲,如果 A={A1,A2,A3,...},B={B1,B2,B3,...}A=\{A_1, A_2, A_3, ...\},B=\{B_1, B_2, B_3, ...\}A={A1,A2,A3,...},B={B1,B2,B3,...}。
那么 A×B=(A,B’)+(A’,B)+(A’,B’)(A’∈A,B’∈B)A×B={(A,B’)+(A’,B)+(A’,B’)} (A’∈A, B’∈B)A×B=(A,B’)+(A’,B)+(A’,B’)(A’∈A,B’∈B)
对于 tartan game
,有 tartan定理
:
若 A=∗a,B=∗bA=*a,B=*bA=∗a,B=∗b,那么存在一个 nnn,使得 A×B=∗nA×B=*nA×B=∗n,其中 n=a⊗bn=a\otimes bn=a⊗b。
tartan定理
对更高维的情况也适用。