【学习笔记】平等博弈及常见的公平博弈类型

平等博弈

G = { L ∣ R } , L = R G=\{L|R\},L=R G={LR},L=R,所以一般简写成 G = { L } G=\{L\} G={L}

即在平等博弈中左右手玩家的可操作方法是相同的。

显然 G + G = 0 G+G=0 G+G=0,因为把当前的游戏复制一份,后手就可以模仿先手的动作,从而后手必胜。

所以 G = 0  or  G ∣ ∣ 0 G=0\ \text{or}\ G||0 G=0 or G0

即,公平博弈要么先手必胜要么后手必胜,不区分左右手。

一些数学化的表达与之前的非平等博弈含义一样:

  • G G G 是一个游戏局面。
  • L L L 是左手玩家操作后的可能后继局面。
  • R R R 是右手玩家操作后的可能后继局面。
  • G ∣ ∣ 0 G||0 G0 表示先手必胜。
  • G = 0 G=0 G=0 表示后手必胜。

nim堆

∗ n *n n 游戏,即石子数为 n n n 的一个 nim \text{nim} nim 堆。

显然有 ∗ n = { 0 , ∗ , ∗ 2 , . . . , ∗ ( n − 1 ) }   ( n ≥ 1 ) ∣ ∣ 0 *n=\{0,*,*2,...,*(n-1)\}\ (n\ge 1)||0 n={0,,2,...,(n1)} (n1)0

因为只有一堆,先手直接拿完即可。

SG定理

G G G 是有限状态的公平博弈, G = { ∗ a , ∗ b , . . . } G=\{*a,*b,...\} G={a,b,...} ,则该博弈等价为 G = ∗ n G=*n G=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\Rightarrow G+G=0G=G 只需要证明 G = ∗ n ⇔ ∗ n − G = 0 ⇒ G + ∗ n = 0 G=*n\Leftrightarrow *n-G=0\Rightarrow G+*n=0 G=nnG=0G+n=0【看作两个公平博弈游戏的当前局面,一个为 G G G ,一个为 n n n 个石子数的 nim \text{nim} nim 堆】

即证明这种新博弈游戏是后手必胜的。

考虑先手的操作:

  • 如果先手操作 ∗ n *n n,将其变为 ∗ m   ( m < n ) *m\ (m<n) m (m<n),那么后手可以操作 G G G,将 G G G 变成 ∗ m *m m
  • 如果先手操作 G G G
    • 将其变为 ∗ 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
  • 但先手不能将 G G G 变为 ∗ n *n n,因为 G G G 的后继局面中没有 ∗ n *n n

石子数一直在减小所以不会有环的情况,后手一定是有对应先手的操作方法,所以后手必胜。

G G G 是有限状态的公平博弈, G = { A , B , C , . . . } G=\{A,B,C,...\} G={A,B,C,...},那么存在一个 n n n,使得 G = ∗ n G=*n G=n

G G G 这个有限状态的博弈构成了一个 DAG

那么 DAG 没有出度的点就是 0 ⇒ n = 0 0\Rightarrow n=0 0n=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 , . . . } = ∗ n G=\{*a, *b, *c, ...\}=*n G={a,b,c,...}=n,其中 n = mex ( a , b , c , . . . ) n=\text{mex}(a, b, c, ...) n=mex(a,b,c,...)

说明任意有限状态的公平博弈和 n n n 个石子的 nim \text{nim} nim 堆等价。

nim和

存在一个 n n n ,使得 ∗ a + ∗ b = ∗ n *a+*b=*n a+b=n。其中 n = a  xor  b n=a\ \text{xor}\ b n=a xor b

证明:

n = a ⊕ b n=a\oplus b n=ab【此等号的意思是“记作”, ⊕ \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(ab,ba)

所以只需要证明 mex ( a ′ ⊕ b , b ′ ⊕ a ) = a  xor  b \text{mex}(a'\oplus b,b'\oplus a)=a\ \text{xor}\ b mex(ab,ba)=a xor b

a = b = 0 a=b=0 a=b=0 时, 0 ⊕ 0 = mex ( ∅ ) = 0 = 0  xor  0 0\oplus 0=\text{mex}(\empty)=0=0\ \text{xor}\ 0 00=mex()=0=0 xor 0【可以理解为初始局面没有一个石子,先手无法操作,所以后手必胜】

归纳法,证明 mex ( a ′  xor  b , a  xor  b ′ ) = a  xor  b \text{mex}(a'\ \text{xor}\ b,a\ \text{xor}\ b')=a\ \text{xor}\ b mex(a xor b,a xor b)=a xor b 即可。

继续转化为证明 a  xor  b a\ \text{xor}\ b a xor b 不在集合 { a ′  xor  b , a  xor  b ′ } \{a'\ \text{xor}\ b,a\ \text{xor}\ b'\} {a xor b,a xor b} 中,且比 a  xor  b a\ \text{xor}\ b a xor b 小的所有自然数都在集合 { a ′  xor  b , a  xor  b ′ } \{a'\ \text{xor}\ b,a\ \text{xor}\ b'\} {a xor b,a xor b} 中。

  • a  xor  b a\ \text{xor}\ b a xor b 不在集合中

    ·反证法,假设 ∃ x < a   x  xor  b = a  xor  b \exist_{x<a}\ x\ \text{xor}\ b=a\ \text{xor}\ b x<a x xor b=a xor b

    则有, x  xor  b  xor  b = a  xor  b  xor  b ⇒ x = a x\ \text{xor}\ b\ \text{xor}\ b=a\ \text{xor}\ b\ \text{xor}\ b\Rightarrow x=a x xor b xor b=a xor b xor bx=a,矛盾。

    假设 ∃ x < b   x  xor  a = a  xor  b \exist_{x<b}\ x\ \text{xor}\ a=a\ \text{xor}\ b x<b x xor a=a xor b ,同理。

  • a  xor  b a\ \text{xor}\ b a xor b 小的所有自然数都在集合 { a ′  xor  b , a  xor  b ′ } \{a'\ \text{xor}\ b,a\ \text{xor}\ b'\} {a xor b,a xor b} 中。

    ∀ x < a  xor  b   x ∈ { a ′  xor  b , a  xor  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 = a  xor  b  xor  x y=a\ \text{xor}\ b\ \text{xor}\ x y=a xor b xor x

    考虑将 a , b , x a,b,x a,b,x 分别异或上 y y y

    y y y 最高位的 1 1 1 必然来自于 a / b / x a/b/x a/b/x 其中一个,也可能是三个都有。

    所以 a / b / x a/b/x a/b/x 三个数分别异或 y y y 后,至少有一个数要变小。

    但是这个数肯定不可能是 x x x,因为 x  xor  y = a  xor  b > x x\ \text{xor}\ y=a\ \text{xor}\ b>x x xor y=a xor b>x,矛盾。

    不妨设 a  xor  y = b  xor  x < a a\ \text{xor}\ y=b\ \text{xor}\ x<a a xor y=b xor x<a,那么 x = b  xor  x  xor  b ∈ x=b\ \text{xor}\ x\ \text{xor}\ b\in x=b xor x xor b 集合 { a ′  xor  b } \{a'\ \text{xor}\ b\} {a xor b}

    由于 x x x 的任意性,证毕。

常见的公平博弈模型

bash博弈

n n n 个物品,每次至少取一个,最多取m个,先取光的胜。

因为一轮总可以两个玩家一起取 m + 1 m+1 m+1 个。

所以如果 n n n m + 1 m+1 m+1 的倍数,那么后手必能先取光。

否则,先手可以第一次取 n % ( m + 1 ) n\%(m+1) n%(m+1) 个,然后设后手取 x x x 个,先手第二轮以后就取 m + 1 − x m+1-x m+1x 个。

当然也可以直接用 SG定理 算。

nim博弈

n n n 堆石子,每次可以选一堆石子任意拿,最少拿一颗,先取光的胜。

每一堆石子就是 ∗ a i *a_i ai n n n 堆石子等价于 1 1 1 堆石子,个数为这 n n n 堆石子的异或和。

当且仅当异或和为 0 0 0 时后手必胜。

nim-k博弈

n n n 堆石子,每次可以选最少 1 1 1 堆,不超过 k k k 堆石子,在这些堆石子里面任意拿,每堆最少拿一颗,先取光的胜。

把这 n n n 堆石子的数量转成二进制,然后在每一位上加起来,如果每一位都是 k + 1 k+1 k+1 的倍数,那么后手胜,否则先手胜。

具体证明因为以前写过,就不再赘述!

可以把 nim-k博弈 认为是一个高维的 nim和

nim-k博弈 是一个有限状态的公平游戏,所以当然可以由 SG定理 ,化简成 ∗ n *n n 的形式。

但是只有是否等于 0 0 0 的时候有规律,其他时候 n n n 的取值没有明显的规律。

所以一般只能定性研究 nim-k博弈,很难研究含有 nim-k博弈 的组合游戏。

由于可以看作是高维的 nim和。所以 ∗ n *n n 的游戏都可以在同时操作 k k k 个游戏的意义下组合起来。

bash-k博弈 n n n 堆石子,每次可以选最少 1 1 1 堆,不超过 k k k 堆石子,在这些堆石子里面任意拿,每堆最少拿一颗,最多拿 r r r 颗,先取光的胜。

单独来看,每堆石子是一个 bash博弈,游戏的值是 ∗ ( a i ( m o d r + 1 ) ) *(a_i\pmod{r+1}) (ai(modr+1))

再把这 n n n 堆石子用 nim-k 的方式组合起来,所以就是把 a i ( m o d r + 1 ) a_i\pmod {r+1} ai(modr+1) 变成二进制,然后每一位加起来,如果每一位都是 k + 1 k+1 k+1 的倍数,则后手赢,否则先手赢。

wythoff博弈

2 2 2 堆石子,每人每次可以拿走任意一堆中任意数量的石子 或 在两堆石子中拿走相同数量的石子,不能拿的人输。

同样地,wythoff博弈 的值没有明显的规律,只有为 0 0 0 的位置 ( x , y ) (x,y) (x,y) 有规律:

x i = mex { x j , y j ∣ j < i } , y i = x i + i x_i=\text{mex}\Big\{x_j,y_j\Big|j<i\Big\},y_i=x_i+i xi=mex{xj,yjj<i},yi=xi+i

前几个为 0 0 0 的位置: ( 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}=4 mex=4,这是第三个【从零开始编号】,所以 + 3 +3 +3

当不算 ( 0 , 0 ) (0,0) (0,0) 时,可以发现 x i , y i x_i,y_i xi,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={αnnN+},B={βnnN+},则 A ⋂ B = ∅ ∧ A ⋃ B = N + A\bigcap B=\empty\wedge A\bigcup B=N^+ AB=AB=N+

套用 betty定理 x i = ⌊ α i ⌋ , y i = ⌊ β 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\rfloor xi=αi,yi=βi=αi+i=(α+1)i

解出 β = α + 1 ⇒ α = 1 + 5 2 \beta=\alpha+1\Rightarrow \alpha=\frac{1+\sqrt{5}}{2} β=α+1α=21+5

这样就得到了为 0 0 0 的位置的通项了, ( ⌊ 1 + 5 2 i ⌋ , ⌊ 3 + 5 2 i ⌋ ) (\lfloor\frac{1+\sqrt{5}}{2}i\rfloor,\lfloor\frac{3+\sqrt{5}}{2}i\rfloor) (21+5 i,23+5 i)

扩展wythoff博弈

2 2 2 堆石子,每人每次可以拿走任意一堆中任意数量的石子 或 在两堆石子中数量差 ≤ k \le k k 的石子,不能拿的人输。

x i = mex { x j , y j ∣ j < i } , y i = x i + ( k + 1 ) i x_i=\text{mex}\Big\{x_j,y_j\Big|j<i\Big\},y_i=x_i+(k+1)i xi=mex{xj,yjj<i},yi=xi+(k+1)i

仍然是套用 betty定理

fibonacci博弈

1 1 1 堆石子有 n n n 个,两人轮流取。先取者第 1 1 1 次可以取任意多个,但不能全部取完。

以后每次取的石子数不能超过上次取子数的 2 2 2 倍,取完者胜。

n n n 是斐波那契数,那么先手必败,否则必胜。

证明:

实际上先手一次取的石子数目一定 < 1 3 n <\frac{1}{3}n <31n,否则后手可在下一步一次性取完。这将是以下证明的基石。

斐波那契数的情形,首先 f ( 1 ) = 2 , f ( 2 ) = 3 f(1)=2,f(2)=3 f(1)=2,f(2)=3 的情形先手必败。

归纳法。【根据斐波那契以及不等式的转化可得出以下关系式】
{ f ( n ) = f ( n − 1 ) + f ( n − 2 ) f ( n − 1 ) < 2 f ( n − 2 ) < f ( n )   ( 1 ) 3 f ( n − 2 ) > f ( n )   ( 2 ) 4 f ( n − 2 ) < 3 f ( 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(n1)+f(n2)f(n1)<2f(n2)<f(n) (1)3f(n2)>f(n) (2)4f(n2)<3f(n+1)(3)
( 2 ) (2) (2) 得先手不能一次取超过 f ( n − 2 ) f(n-2) f(n2) 的石子。

那么基于更小情况的归纳假设可知 f ( n − 2 ) f(n-2) f(n2) 是必败局面。

所以后手可以控制其自己石子与之抗衡,使得后手拿走 f ( n − 2 ) f(n-2) f(n2) 的最后一个石子。

接下来只剩 f ( n − 1 ) f(n-1) f(n1) 个石子了。

基于 ( 2 ) ( 3 ) (2)(3) (2)(3) 可以知道先手仍然无法一次性拿完 f ( n − 1 ) f(n-1) f(n1)

由归纳假设可得也是后手取到 f ( n − 1 ) f(n-1) f(n1) 这堆石子的最后一颗。

所以先手是必败的。

非斐波那契数的情形,由 Zeckendorf定理,任何正整数可以表示为若干个不连续的斐波那契数之和。

n n n 不是斐波那契数时, n = f ( a 1 ) + f ( a 2 ) + . . . f ( a p ) ( p ≥ 1 ∧ a 1 > a 2 > … > a p ) 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)(p1a1>a2>>ap)

根据 ( 1 ) (1) (1) 先手总能直接拿掉最小的数 f ( a p ) f(a_p) f(ap)。后手就会陷入先手必败的情形中。所以先手必胜。

阶梯博弈

相当于奇数阶梯的 nim \text{nim} nim 堆的和。

在这里插入图片描述

将阶梯倒着排列成一行。发现两个棋子之间的空格数就是阶梯上的石子数。

最高阶只能将石子往下移,所以只能变少,对应地在一行的最左边,当最左边黄棋左移时对应石子下放的操作。

看奇数阶梯是因为,偶数段操作时,虽然短暂性地让后面一段变长,但是另一个人可以相应的操作后一段。而这个可操作距离也是有限的。

也就是说,如果 G = ∗ n G=*n G=n,虽然 G G G 也能到 ∗ x   ( x > n ) *x\ (x>n) x (x>n),但大于 n n n 的这种 x x x 的数量是有限的,后手总可以变回去。

green hackenbush

  • 链的情形:一条长度为 n n n 的链相当于一个大小为 n n n 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博弈 完全一样。

先手必胜的条件:

  • 每堆石子数异或和为 0 0 0 且每堆石子只有 1 1 1 个。
  • 每堆石子数异或和不为 0 0 0 且至少有一堆石子的个数 > 1 >1 >1

定性分析:

先手必胜的条件

  • 游戏和为 0 0 0 且单个游戏的 S G SG SG 函数 ≤ 1 \le 1 1
  • 游戏和不为 0 0 0 且至少有一个单一游戏的 S G SG SG 函数 > 1 >1 >1

定量分析:

G G G 是有限状态的 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) xG(x<2),那么 G G G 可以化简成 ∗ n *n n,其中 n = mex ( a , b , c , . . . ) n=\text{mex}(a, b, c, ...) n=mex(a,b,c,...)

推论:若 G G G 可以写成 ∗ n *n n 的形式,那么 G + ∗ G+* G+ 可以写成 ∗ ( n ⊕ 1 ) *(n\oplus 1) (n1) 的形式。

普通的公平博弈: G = ∗ n G=*n G=n 表示的是 G + ∗ n G+*n G+n 的组合游戏中,后手必胜。

Misère 的公平博弈:定义函数 n = s g − ( G ) n=sg^-(G) n=sg(G),也表示 G + ∗ n G+*n G+n 的组合游戏中,后手必胜。

s g − ( 0 ) = 1 sg-(0)=1 sg(0)=1

G = { A , B , C , . . . } , s g − ( G ) = mex ( s g − ( A ) , s g − ( B ) , s g − ( 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 = − G G=-G G=G,但 Misère Game G = − G G=-G G=G 却推不出 G + G = 0 G+G=0 G+G=0

{ ∗ 2 } + { ∗ 2 } \{*2\}+\{*2\} {2}+{2} 是后手必胜。

要注意化简和组合游戏后手必胜的区别。

在普通公平游戏中,两者无区别,在 Misère Game 中,是有区别的。

后手必胜+后手必胜 或 先手必胜+先手必胜 可能是先手必胜也可能是后手必胜。

Every-SG

是一些游戏的组合。玩家对于每个可以操作的游戏都必须要操作,不能操作的人输。

由于每个可以操作的游戏都必须要操作,所以对于每个单个可以赢的游戏都尽可能赢。

但问题的关键是让能赢的游戏尽可能长的玩下去,并且不能赢的游戏尽快输掉。

因为整个游戏是看最后一个谁不能操作,而不是看谁的单一游戏胜利次数更多。

站在先手的角度考虑:先计算每个状态的输赢情况(或者 S G SG SG 值是否为 0 0 0 )然后计算步数。

  • G = 0 G=0 G=0 的游戏 G = { A , B , C , . . . } G=\{A, B, C, ...\} G={A,B,C,...},先手必败,所以想最快输掉,就计算 s t e p ( G ) = min ⁡ { s t e p ( A ) , s t e p ( B ) , s t e p ( C ) , . . . } + 1 step(G)=\min\{step(A), step(B), step(C), ...\}+1 step(G)=min{step(A),step(B),step(C),...}+1
  • G > 0 G>0 G>0 的游戏 G = { A , B , C , . . . } G=\{A, B, C, ...\} G={A,B,C,...},先手必胜,所以想拖时间,就计算 s t e p ( G ) = max ⁡ { s t e p ( A ) , s t e p ( B ) , s t e p ( 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)
  • 终止状态的 s t e p = 0 step=0 step=0

Every-SG游戏 中先手必胜当且仅当单个游戏中最大的 step \text{step} step 值为奇数。

nim积

超现实数的乘法定义: x y = { x L y + x y L − x L y L , x R y + x y R − x R y R   ∣   x L y + x y R − x L y R , x R y + x y L − x R y L } 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+xyLxLyL,xRy+xyRxRyR  xLy+xyRxLyR,xRy+xyLxRyL}

例如 x − x L > 0 , y − y L > 0 ⇒ ( x − x L ) ( y − y L ) = x y − x L y − x y L + x L y L > 0 ⇒ x y > x L y + x y L − x L y L x-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_L xxL>0,yyL>0(xxL)(yyL)=xyxLyxyL+xLyL>0xy>xLy+xyLxLyL

同理可得其余式子。

仿照超现实数乘法的定义,可以形式化地写出 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 , R L,R L,R 区分,所以超现实数的四个式子是一样的,且平等游戏中 + / − +/- +/ 是没有区别的。】

SG定理 得, ∃ n = a ⊗ b   ∗ n = ∗ a × ∗ b \exist_{n=a\otimes b}\ *n=*a\times *b n=ab n=a×b。【 ⊗ \otimes 含义是“nim积”】

关于 n n n 具体的计算,先打个小范围的表:

a\b0123456789101112131415
00000000000000000
10123456789101112131415
20231810119121415134675
30312121513144756811910
40481262141011153713951
50510152781336912141114
60611131485371121091524
70791410133415861521211
80812411371513519614102
90914715618512112103413
100101553912611114428137
110111367121019241514538
120124813195610214117153
13013619415214385710112
140147951121210413315186
150155101144112137831269

根据表,可以找到几个性质:

  • 0 ⊗ x = 0 0\otimes x=0 0x=0
  • 1 ⊗ x = x 1\otimes x=x 1x=x
  • a ⊗ b = b ⊗ a a\otimes b=b\otimes a ab=ba
  • ( a ⊗ b ) ⊗ c = a ⊗ ( b ⊗ c ) (a\otimes b)\otimes c=a\otimes (b\otimes c) (ab)c=a(bc)
  • nim积nim和 具有乘法分配律: a ⊗ ( b ⊕ c ) = a ⊗ b ⊕ a ⊗ c a\otimes (b\oplus c)=a\otimes b\oplus a\otimes c a(bc)=abac

另外还有一些常见性质:

n = 2 2 n ( n ≥ 0 ) n=2^{2^n}(n\ge 0) n=22n(n0),即 n n n 是一个 fermat powers of 2。【 n = 2 , 4 , 16... n=2,4,16... n=2,4,16...】 则有

  • x < n x<n x<n 时,有 n ⊗ x = n × x n\otimes x=n\times x nx=n×x
  • n ⊗ n = 3 2 n n\otimes n=\frac{3}{2}n nn=23n
  • a , b < n a,b<n a,b<n 时,有 a ⊗ b < n a\otimes b<n ab<n

因此,对于 a ⊗ b a\otimes b ab 的计算,我们可以将 a a a b b b 拆成一些 2 2 2 的次幂的 nim和,利用分配律转为计算 a ′ ⊗ b ′ a′\otimes b′ ab,其中 a ′ a′ a b ′ b′ b 都是 2 2 2 的次幂。

然后再把 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 = 11 8\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=11 84=244=26=2(24)=2224=38=11

定理:对于某个非负整数 n n n,以及 S = { x ∣ x ∈ N , x < 2 2 n } S=\{x|x\in N,x<2^{2^n}\} S={xxN,x<22n} ( S , ⊗ , ⊕ ) (S,\otimes,\oplus) (S,,) 构成一个特征为 2 2 2 的域。

n n n 个单位元相加 = 0 =0 =0,符合这样条件的域称为特征为 n n n 的域。

而我们比较熟悉的数域单位元是 1 1 1,无论多少个单位元 1 1 1 相加都不可能为 0 0 0,所以数域是特征为 0 0 0 的域。

一般强调特征为 2 2 2 的域就是说两个一样的数相加等于 0 0 0 的时候,不能直接认为这两个数等于 0 0 0

因为在特征为 2 2 2 的域上两个单位元相加也是 0 0 0

所以可以用类似 karatsuba 的方法来推导 nim积

a = a 1 ⊗ P ⊕ a 2 , b = b 1 ⊗ P ⊕ b 2 a=a_1\otimes P\oplus a_2,b=b_1\otimes P\oplus b_2 a=a1Pa2,b=b1Pb2,其中 P P P 是一个 fermat powers of 2

a ⊗ b = a 1 ⊗ b 1 ⊗ P ⊗ P ⊕ a 2 ⊗ b 2 ⊕ ( a 1 ⊗ b 2 ⊕ a 2 ⊗ b 1 ) ⊗ P a\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 P ab=a1b1PPa2b2(a1b2a2b1)P

因为 a 1 , a 2 , b 1 , b 2 < P a_1,a_2,b_1,b_2<P a1,a2,b1,b2<P,所以 a 1 ⊗ b 2 ⊕ a 2 ⊗ b 1 < P a_1\otimes b_2\oplus a_2\otimes b_1<P a1b2a2b1<P

P ⊗ P = 3 2 P P\otimes P=\frac{3}{2}P PP=23P,拆成 1 2 + 1 \frac{1}{2}+1 21+1

变为 a ⊗ b = a 1 ⊗ b 1 ⊗ ( P 2 ) ⊕ a 2 ⊗ b 2 ⊕ ( a 1 ⊗ b 1 ⊕ a 1 ⊗ b 2 ⊕ a 2 ⊗ b 1 ) × P a\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 P ab=a1b1(2P)a2b2(a1b1a1b2a2b1)×P

因为 a 1 ⊗ b 2 ⊕ a 2 ⊗ b 1 = ( a 1 ⊗ a 2 ) ⊗ ( b 1 ⊗ b 2 ) ⊕ a 1 ⊗ b 1 ⊕ a 2 ⊗ b 2 a_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_2 a1b2a2b1=(a1a2)(b1b2)a1b1a2b2

所以 a ⊗ b = a 1 ⊗ b 1 ⊗ ( P 2 ) ⊕ a 2 ⊗ b 2 ⊕ ( ( a 1 ⊗ a 2 ) ⊗ ( b 1 ⊗ b 2 ) ⊕ a 2 ⊗ b 2 ) × P a\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 P ab=a1b1(2P)a2b2((a1a2)(b1b2)a2b2)×P

P 2 \frac{P}{2} 2P 虽然不是一个 fermat powers of 2,但仍然是 2 2 2 的幂。

所以递归下去每次只需做 3 3 3 次折半乘法,只考虑这部分复杂度是 karatsuba 的复杂度,即 O ( ( n 2 ) l o g 2 3 ) = O ( n l o g 2 3 3 ) O((\frac n2)^{log_2^3})=O(\frac{n^{log_2^3}}{3}) O((2n)log23)=O(3nlog23) 的。

所以 T ( n ) = 3 T ( n 2 ) + O ( n l o g 2 3 3 ) = O ( m ∗ 3 m ) T(n)=3T(\frac{n}2)+O(\frac{n^{log_2^3}}{3})=O(m*3^m) T(n)=3T(2n)+O(3nlog23)=O(m3m),其中 m = log  n m=\text{log}\ n m=log n

最简单的就是记忆化搜索,小范围存一个表。

稍微复杂一点的是,这个域存在原根, [ 0 , 65536 ) [0,65536) [0,65536) 的最小的原根是 258 ( 2 2 4 = 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

如果有很多枚黑色棋子,就是每个棋子分别算 ∗ a i × ∗ b i *a_i×*b_i ai×bi 然后再 nim \text{nim} nim 加起来。

翻棋子游戏

n n n 枚棋子排成一排,有些棋子是黑色的,有些是白色的。

两个人轮流操作,每次操作将一些 限定的集合 中的棋子颜色反转。

但必须保证反转的棋子的集合中最右边的一枚一开始一定是黑色的。

显然翻棋子游戏是公平的无环的博弈,所以可以用 SG定理 定量算。

对于这一类游戏,有一个定理(不一定是一维的):

某一个局面的 S G SG SG 值,等于局面中每个黑色棋子单一存在时的局面的 S G SG SG 值的 nim \text{nim} nim 和。

我们可以考虑把翻转的操作当作加一个相同的 c o p y copy copy

因为在 nim \text{nim} nim 和的定义下两个相同数的 nim \text{nim} nim 和是0,可以发现这两种方式是等价的。

也就是说每个位置的 S G SG SG 值是独立的。

游戏的积,tartan定理

如果我们把两个一维的翻棋子游戏 A A A B B B 结合到一起,表示所选的行应该遵从翻棋子游戏 A A A 中的规定,所选的列应该遵从翻棋子游戏 B B B 中的规定。

那么我们把这个游戏叫做一个 tartan game,用 A × B A×B A×B 表示。

形式化地讲,如果 A = { A 1 , A 2 , A 3 , . . . } , B = { B 1 , B 2 , B 3 , . . . } 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)(AA,BB)

对于 tartan game,有 tartan定理

A = ∗ a , B = ∗ b A=*a,B=*b A=a,B=b,那么存在一个 n n n,使得 A × B = ∗ n A×B=*n A×B=n,其中 n = a ⊗ b n=a\otimes b n=ab

tartan定理 对更高维的情况也适用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值