文章目录

  • 平等博弈
  • 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+5​​i⌋,⌊23+5​​i⌋)。

扩展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<31​n,否则后手可在下一步一次性取完。这将是以下证明的基石。

斐波那契数的情形,首先 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={xL​y+xyL​−xL​yL​,xR​y+xyR​−xR​yR​ ∣ xL​y+xyR​−xL​yR​,xR​y+xyL​−xR​yL​}。

例如 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−xL​y−xyL​+xL​yL​>0⇒xy>xL​y+xyL​−xL​yL​

同理可得其余式子。

仿照超现实数乘法的定义,可以形式化地写出 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=23​n。
  • 当 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=23​P,拆成 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定理 对更高维的情况也适用。

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

  1. C语言学习笔记06-占位符格式、C基本类型及逃逸字符一些细节(附介绍BCD码)

    主要整理有关占位符格式与逃逸字符的一些细节 朋友们,看栗子--"BCD解码" (文末附BCD码介绍) 一个BCD数的十六进制是0x12(对应二进制表示:0001 0010),它表达 ...

  2. oracle 表复制 long,【学习笔记】Oracle数据库使用copy实现long类型转移表空间案例 ORA-00997...

    天萃荷净 使用copy实现long类型转移表空间,表空间的数据文件损坏,在转移该表空间相关表时,遇到让人郁闷的long类型.不能使用ctas和move来实现转移,最后通过古老的copy来实现该项工作. ...

  3. 小白终是踏上了这条不归路----小文的mysql学习笔记(4)----常见的基本函数

    ** 小白终是踏上了这条不归路----小文的mysql学习笔记(1) 小白终是踏上了这条不归路----小文的mysql学习笔记(2)----条件查询 小白终是踏上了这条不归路----小文的mysql学 ...

  4. shell脚本编程学习笔记4(xdl)——Bash常见环境变量

    shell脚本编程学习笔记4--Bash常见环境变量 非专业运维,例如开发人员,环境变量熟悉常见的,了解不常见的即可. 1,简介 环境变量配置文件中主要是定义对系统的 操作环境生效的系统默认环境变量, ...

  5. 经颅磁的学习笔记之二:常见TMS刺激协议

    关注"心仪脑"查看更多脑科学知识的分享 关键词:经颅磁.TMS 在上一期的"经颅磁学习笔记"中,我们介绍了经颅磁刺激的基本原理.那么,作为一种神经调控手段,经颅 ...

  6. Struts2学习笔记(一)--入门常见配置

     Struts2框架的学习路线 l 第一天:Struts2的概述.Struts2的入门.Struts2常见的配置.Struts2的Action的编写 l 第二天:Struts2的数据的封装.结果页面配 ...

  7. Verilog HDL学习笔记(一)常见错误

    我初学verilog语言,很多细节都没注意,按着自己的思想就写了,编译的时候才发现各种问题.这些都是我在学习中遇到的问题,还是很常见的. 1.Error (10028): Can't resolve ...

  8. 学习笔记 --- 编码过程中常见的三种异步方式

    实际的编码过程中, 凡是涉及到网络通信的代码, 异步都是决不可缺少的. 那么什么是异步呢? 异步就是子线程, 异步通过开辟子线程来实现, 所以一提到异步就应该想到子线程. 即使不涉及网络通信, 异步也 ...

  9. 详细的频域滤波学习笔记(5)--常见的频域滤波器

    1.频域滤波的一般步骤   基本的滤波公式有如下形式: 其中F(x,y)是输入图像f(x,y)的DFT,H(u,v)是滤波函数(也成为滤波器,或者滤波传递函数),g(x,y)是滤波后的输出图像,它是由 ...

最新文章

  1. 【ACL2020】百度11篇论文被国际自然语言处理顶级会议ACL 2020录用
  2. python猜数游戏流程_python简单猜数游戏实例
  3. linux 进程间 close-on-exec 机制 简介
  4. 单片机课程设计电梯(c语言),单片机课程设计之电梯控制系统.docx
  5. Spring boot 使用
  6. GraphViz :1 安装和简单使用
  7. VRRP——虚拟路由器冗余协议
  8. 业务与技术相结合,双活体系支付架构建设
  9. 如何解决“指定的服务已被标记为删除”错误
  10. SpringBoot入门 2
  11. 仿QQ音乐网站源码PHP,仿QQ音乐首页
  12. 配置库管理及版本管理规范
  13. 腾讯实习网申到面试--小记
  14. oa工作任务管理系统设计
  15. PG-Strom源码分析
  16. 博弈论在自动驾驶方向的应用(Ⅰ):变道决策的综述
  17. 【机器学习】关联规则挖掘算法 + 三大案例实战 + Apriori算法 + Python代码实现
  18. 公司企业兔年祝福元旦祝福贺卡邀请函模板!
  19. 【转载】分贝是个什么东西?
  20. 主流的操作系统(带你快速了解)

热门文章

  1. 住宅按套内面积算,医院人脸识别黄牛,DNA碱基对可能会扩充,菜鸟发布供应链系统,猪瘟不影响食品安全,这就是今天的大新闻...
  2. 超详细图解!【MySQL进阶篇】MySQL事务和锁
  3. 计算机数控是什么专业,数控是什么专业
  4. linux c中动态申请二维数组,Linux C 编程详解第五篇:二维数组
  5. 统计学习导论_统计机器学习之扫盲导论篇
  6. linux自动应答,08. 创建 ks.cfg自动应答文件
  7. python引用其他文件提示找不到模块_Python:为什么导入的模块不能引用另一个导入的模块?...
  8. 算法设计与分析——递归与分治策略——最接近点对问题
  9. C++ 学习之旅(12)——static用法小结
  10. [计组]寄存器的基本含义