博弈论总结
Nim 和
可知 \(a\oplus b=a\operatorname{xor}b\)。
设一个 Nim 游戏的值为 \(x\),则两个 Nim 游戏的和即为 \(x\oplus y\)。
它是 Acrostic Twins 的 SG 函数。
Nim 积
在 Nim 和之上,我们希望定义一个优先级更高的运算 \(\otimes\),使得 Nimber(Nim number) 和 \((\oplus,\otimes)\) 构成一个域。
然后就出现了:
这是 Turning Corner 的 SG 函数。
Turning Corner:
给定一个 \(n\times m\) 的二维矩阵,上面每个方格中均放有一枚硬币,初始时为正面或反面的一种。Alice 先手,她和 Bob 交替地翻转一个矩形的四个顶点,并限制矩形的右下角必须从反面翻至正面。
它有很多优美的性质,与普通乘法类似:
- \(x\otimes 0=0\)
- \(x\otimes 1=x\)
- \(x\otimes y=y\otimes x\)
- \((x\otimes y)\otimes z=x\otimes(y\otimes z)\)
- \(x\otimes(y\oplus z)=x\otimes y\oplus x\otimes z\)
现在问题来了:如何计算 \(x\otimes y\) 的值?
Nim 积的计算
对于费马数 \(F_n=2^{2^n}(n\in\mathbb N)\),有:
- 若 \(a<F_k\),则 \(a\otimes F_k=a\times F_k\)
- \(F_k\otimes F_k=\frac{3}{2}F_k\)
这里给出一些计算 Nim 积的方式。
第一种:将 \(x\otimes y\) 拆成 \((aF_k\oplus b)\otimes(cF_k\oplus d)\),其中 \(0\le a,c<F_k\),然后有:
设 \(n=2^k\),则上式可写作
每次找到最小的 \(k\),使得 \(2^{2^k}>\max(x,y)\),然后递归计算上述四项。时间复杂度为 \(\mathcal O\left(4^{\mathcal O(\log\log V)}\right)\)。
第二种:将一个数拆成二进制形式,两两计算 \(2^x\otimes 2^y\) 的值,再拆成费马数的形式计算。直接做的时间复杂度是 \(\mathcal O(\log^2 n\log\log n)\) 的。
可以优化为 \(\mathcal O(\log^2 n)\),但是速度不及下一种方法。
第三种:对于第一种方法,相当于逐位计算,实际上可以选取一个好的 \(k\),产生折半的效果。这样做的时间复杂度是 \(\mathcal O\left(4^{\mathcal O(\log\log\log V)}\right)\)。速度极快。
第四种:如果给定有限域,那么存在原根,可以直接将乘法转换为指数上的加法,速度更快。
(当 \(k=4\) 时最小的原根为 \(258\))
Nimber 在 \([0,F_k)\cap\mathbb N\) 中的有限域上有:
Tartan 定理
若 \(SG(x)\) 是 \(x\) 的 SG 函数,那么 \(G_1\times G_2\) 的 SG 函数为 \(SG(G_1)\otimes SG(G_2)\)。
比如 Turning Corners 游戏,它其实就是 Acoustic Twins 与 Acoustic Twins 的乘积。
它很容易计算 SG 函数,但不容易寻找必胜策略。

浙公网安备 33010602011771号