文章目录
平等博弈
G = { L ∣ R } , L = R G=\{L|R\},L=R G={L∣R},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 G∣∣0。
即,公平博弈要么先手必胜要么后手必胜,不区分左右手。
一些数学化的表达与之前的非平等博弈含义一样:
- G G G 是一个游戏局面。
- L L L 是左手玩家操作后的可能后继局面。
- R R R 是右手玩家操作后的可能后继局面。
- G ∣ ∣ 0 G||0 G∣∣0 表示先手必胜。
- 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,...,∗(n−1)} (n≥1)∣∣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=0⇔G=−G⇒ 只需要证明 G = ∗ n ⇔ ∗ n − G = 0 ⇒ G + ∗ n = 0 G=*n\Leftrightarrow *n-G=0\Rightarrow G+*n=0 G=∗n⇔∗n−G=0⇒G+∗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
0⇒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 , . . . } = ∗ 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=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 ) = a xor b \text{mex}(a'\oplus b,b'\oplus a)=a\ \text{xor}\ b mex(a′⊕b,b′⊕a)=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 0⊕0=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 b⇒x=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+1−x 个。
当然也可以直接用 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,yj∣∣∣j<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={⌊α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定理
,
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+5i⌋,⌊23+5i⌋)。
扩展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,yj∣∣∣j<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(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定理
,任何正整数可以表示为若干个不连续的斐波那契数之和。
当 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)(p≥1∧a1>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)
∗x∈G(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) ∗(n⊕1) 的形式。
普通的公平博弈: 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+xyL−xLyL,xRy+xyR−xRyR ∣ xLy+xyR−xLyR,xRy+xyL−xRyL}。
例如 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 x−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 , R L,R L,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积”】
关于 n n n 具体的计算,先打个小范围的表:
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 = 0 0\otimes x=0 0⊗x=0
- 1 ⊗ x = x 1\otimes x=x 1⊗x=x
- a ⊗ b = b ⊗ a a\otimes b=b\otimes a a⊗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 ⊗ c a\otimes (b\oplus c)=a\otimes b\oplus a\otimes c a⊗(b⊕c)=a⊗b⊕a⊗c
另外还有一些常见性质:
若
n
=
2
2
n
(
n
≥
0
)
n=2^{2^n}(n\ge 0)
n=22n(n≥0),即
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 n⊗x=n×x。
- n ⊗ n = 3 2 n n\otimes n=\frac{3}{2}n n⊗n=23n。
- 当 a , b < n a,b<n a,b<n 时,有 a ⊗ b < n a\otimes b<n a⊗b<n。
因此,对于
a
⊗
b
a\otimes b
a⊗b 的计算,我们可以将
a
a
a 和
b
b
b 拆成一些
2
2
2 的次幂的 nim和
,利用分配律转为计算
a
′
⊗
b
′
a′\otimes b′
a′⊗b′,其中
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 8⊗4=2⊗4⊗4=2⊗6=2⊗(2⊕4)=2⊗2⊕2⊗4=3⊕8=11。
定理:对于某个非负整数 n n n,以及 S = { x ∣ x ∈ N , x < 2 2 n } S=\{x|x\in N,x<2^{2^n}\} S={x∣x∈N,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=a1⊗P⊕a2,b=b1⊗P⊕b2,其中
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 a⊗b=a1⊗b1⊗P⊗P⊕a2⊗b2⊕(a1⊗b2⊕a2⊗b1)⊗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 a1⊗b2⊕a2⊗b1<P。
P ⊗ P = 3 2 P P\otimes P=\frac{3}{2}P P⊗P=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 a⊗b=a1⊗b1⊗(2P)⊕a2⊗b2⊕(a1⊗b1⊕a1⊗b2⊕a2⊗b1)×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 a1⊗b2⊕a2⊗b1=(a1⊗a2)⊗(b1⊗b2)⊕a1⊗b1⊕a2⊗b2。
所以 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 a⊗b=a1⊗b1⊗(2P)⊕a2⊗b2⊕((a1⊗a2)⊗(b1⊗b2)⊕a2⊗b2)×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(m∗3m),其中 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’)(A’∈A,B’∈B)
对于 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=a⊗b。
tartan定理
对更高维的情况也适用。