Loading

学习笔记 【SG函数】

学习笔记 SG函数

博弈论补的太晚了。

定义

对于一种公平博弈游戏(博弈状态的先后关系可构成一个拓扑图),构造 \(SG(x)\) 函数为博弈状态为 \(x\) 时的一个非负整数值,我们给定其一个值,由下列公式得到:

\[SG(u)=\begin{cases}0&(v\in \texttt V)\\\texttt{mex}\{SG(v)\}&(\texttt{otherwise})\end{cases} \]

以及一个重要的性质(\(SG\) 定理):后手能赢,当且仅当 \(\bigoplus_{u\in \texttt U} SG(u)=0\),否则先手赢

其中 \(v\)\(u\) 可以一步得到的子博弈状态,\(\texttt V\) 是终局,\(\texttt U\) 是起始状态,\(\texttt{mex}\) 指的是集合中第一个未出现的非负整数。

注意这里的多个 \(SG(u)\) 代表的可能是多个子博弈游戏,例如经典 \(nim\) 取石子游戏多个石子堆对应的就是多个 \(SG(u)\)

证明

我们先只讨论起始状态异或和等于 \(0\) 的情况。

因为终局情况一定是多个子博弈游戏都到了 \(SG(v)\) ,此时显然 \(\bigoplus SG(v)=0\) 满足定理。

所以我们只要证明在任何情况下,不管先手如何走,后手都可以走一步使得异或和等于0。

当一个子博弈游戏被先手从 \(SG(u)\) 到了 \(SG(v)\) 出现两种情况,证明如下:

  • \(SG(v)>SG(u)\)

    因为 \(v\)\(SG\) 值较大,所以 \(v\) 的子博弈状态一定有一个值为 \(SG(u)\) 此时先手走向值为 \(SG(u)\) 的子博弈状态状态即可。

  • \(SG(v)<SG(u)\)

    有点麻烦。。。

    \(SG(u)\)\(a\)\(SG(v)\)\(b\),原本的状态是 \(a\oplus a=0\) ,然而现在变成了 \(a\oplus b\) ,所以我们只要找到其它博弈状态的 \(SG\) 函数中有一个数 \(c\),将 \(c\) 变成 \(c\oplus a\oplus b\),此时原始就变成了 \(a\oplus(a\oplus b)\oplus b=b\oplus b=0\)

    因此只要保证 \(c\oplus a\oplus b\) 一定要小于 \(c\),问题就变成证明这个 \(c\) 必定存在。

    \(x_i\) 表示 \(x\) 的二进制第 \(i\) 位)

    我们再令 \(a\)\(b\) 最高的不相同的二进制位为 \(i\)

    • \(a_i=1\),那么因为原来除 \(SG(u)\) 外的 \(SG\) 函数异或起来是 \(a\),所以必然有一个 \(SG\) 函数值为 \(c\),满足 \(c_i=1\),此时 \(a\oplus b\) 的最高非 \(0\) 位就是 \(i\),那么显然有 \(c\oplus a\oplus b\) 小于 \(c\)
    • \(a_i=0\),那么 \(i\) 必然不是 \(a\) 的最高非位,而其它 \(SG\) 函数必然有一个 \(c\),它的最高非 \(0\) 位和 \(a\) 相同,此时 \(c\oplus a\oplus b\) 最高非 \(0\) 位是低于 \(c\) 的最高非 \(0\) 位。
      upd 2021/05/25 :
      发现假了,第二种情况根本不可能,因为 \(b < a\),所以 \(a\)\(b\) 的最高不相同的位一定是 \(a_i = 1 \& b_i = 0\)

如果开始博弈状态异或和不为 \(0\),那么先手显然可以走一步使异或和等于 \(0\),和上述的方法一样。

例题

这种东西一找一大片吧。。。

实际为了掩盖咕咕咕

posted @ 2021-04-28 17:05  RedreamMer  阅读(155)  评论(0编辑  收藏  举报