博弈论

定义

  • 必胜或必胜状态:仅仅考虑当前的状态,不考虑的操作人时,一定必胜或必输

  • \(a\oplus b\)\(a,b\) 在二进制下,对位取反。

  • \[SG(i)=mex{\begin{cases} SG(j) & i\rightarrow j \\ SG(j') & i\rightarrow j' \\ \dots \end{cases}} \]

    其中 \(i\rightarrow j\) 表示 \(i\) 有一条边指向 \(j\)\(mex\) 指一个数列第一个未出现的非负数

Nim 游戏

考虑有 \(n\) 堆石子,两个人轮流来拿走棋子(至少拿一个),拿到最后剩下的一颗棋子的人获胜。

结论

定义 Nim 和 \(= a_1\oplus a_2\oplus a_3\oplus\dots\oplus a_n\)

当 Nim 和 为 \(0\) 时,该状态为必败状态;反之,则为必胜状态。

证明:

我们需要三个引理:

  1. 无后继状态为必败状态

    这个情况只有全 \(0\),同时满足 \(a_1\oplus a_2\oplus\dots\oplus a_n=0\)

  2. 对于当前状态 \(a_1\oplus a_2\oplus\dots\oplus a_n\ne0\),一定存在某种移动使得其异或和为 \(0\)

    考虑来构造一下:

    \(a_1\oplus a_2\oplus\dots\oplus a_n=s\),同时设 \(s\) 的在二进制下,最高位为 \(k\)

    如果我们想使 \(s\) 变为 \(0\),就非常想两边同时乘 \(s\)

    但是每次进行一次拿石子必须需要时某个 \(a_i\) 减少,

    所以可以考虑在 \(a_i\) 处拿,则需要证明 \(a_i\oplus s<a_i\) 的。

    现在来想一想异或的定义,发现 \(s\) 最高位为 \(1\) ,则在 \(a_1,a_2\dots,a_n\) 肯定有一个 \(t\) ,使得 \(a_t\) 这一位也是 \(1\)

    那就拿 \(a_t\oplus s\) ,我们又发现最高位变成了 \(0\)

    由于这是最高位,则 \(a_t\)\(k\) 还高的位就不会改变,所以 \(a_t\oplus s\) 一定 \(<a_t\)

    于是就构造出来一组解了。

  3. 对于当前状态 \(a_1\oplus a_2\oplus\dots\oplus a_n=0\),一定不存在某种移动使得其异或和为 \(0\)

    也就是说,只要有一个 \(a\) 数组中数的位发生改变,那么其异或和就不为零了。

SG 函数

在一个有向无环图中,只有一个起点,上面有一颗棋子,两个玩家轮流来移动这颗棋子(必须移动),最先不能移动棋子的人算输。

\(SG(i)\) 那就表示当前在点 \(i\) 状态(为零必输,非零必赢)

SG 定理

\(n\) 个有向图游戏组成的组合游戏,设起点分别为 \(s_1,s_2,\dots,s_n\)

则当 \(SG(s_1)\bigoplus SG(s_2)\bigoplus \dots\bigoplus SG(s_n)\ne 0\) 时,则游戏先手必赢

同时,这是该游戏状态 \(x\) 的 SG 值。

证明:

  1. \(SG(i)\) 转移到 \(SG(j)=SG(i)\)

    这显然是不可能的,看一会SG 函数的定义就会明白。

  2. \(SG(i)\) 转移到 \(SG(j)>SG(i)\)

    那对手就可以移回与 \(SG(i)\) 相等的点,那就无意义了。

  3. \(SG(i)\) 转移到 \(SG(j)<SG(i)\)

    其实,可以将其抽象成取石子,那就可以使用 Nim 和(即异或和)来求解

posted @ 2024-11-09 20:10  tyccyt  阅读(5)  评论(0编辑  收藏  举报