Nim游戏与SG函数

博弈论最基础的两个知识点 : Nim 游戏, SG 函数.

Nim 游戏

结论 : 若

\[a_1\oplus a_2 \oplus a_3 \oplus...\oplus a_n = 0 \]

先手必胜.

证明 :

\[a_1\oplus a_2 \oplus a_3 \oplus...\oplus a_n = x \]

\(x\) 的二进制表示中的最高位为 \(k\), 那么 \(a_1,a_2...a_n\) 中必然存在至少一个 \(a_i\) 的第 \(k\) 位是 \(1\), 因为 \(a_i \oplus x < a_i\), 所以可以拿走 \(a_i-(a_i\oplus x)\) 个石子使得 \(a_i\) 变成 \(a_i-(a_i-(a_i\oplus x)) = a_i\oplus x\) 个石子. 因为

\[a_1\oplus a_2 \oplus a_3 \oplus...\oplus a_i\oplus...\oplus a_n = x \]

则必然有 :

\[a_1\oplus a_2 \oplus a_3 \oplus...\oplus a_i\oplus x\oplus...\oplus a_n = 0 \]

也就是说, 倘若异或和不为 \(0\), 我们一定可以找到一个 \(a_i\) 使其变成 \(a_i \oplus x\) , 使异或和变为 \(0\). 又因为终止状态 (全 \(0\)) 的异或和为 0, 因此异或和为 \(0\) 为必败态, 异或和不为 \(0\) 为必胜态.

\(SG\) 函数

\(mex\) 函数 : 若 \(S\) 是一个非负整数集合, \(mex(S)\) 为求出未出现在集合中的最小非负整数.

\(SG\)​ 函数 : 在有向图游戏 \(G\)​ 中, 设当前结点为 \(x\)​, 后继结点分别有 \(y_1, y_2,..,y_k\)​ . 则 \(SG(x)=mex\{SG(y_1),SG(y_2),...SG(y_k)\}\)​​. 起点 \(s\)​ 的 \(SG\)​ 值为整个游戏的 \(SG\)​ 值, \(SG(s)=SG(G)\)​, 若有多个有向图游戏 \(G_1,G_2,...,G_k\)​, 则 \(SG(G)=SG(G_1)\oplus SG(G_2)\oplus ...\oplus SG(G_k)\). 这与 \(Nim\) 游戏的证明相同.

\(SG\) 函数的求法 : 记忆化搜索.

Nim 游戏 : Acwing 891. Nim游戏, Acwing 892. 台阶-Nim游戏

\(SG\) 函数 : Acwing 893. 集合-Nim游戏

posted @ 2021-08-12 15:34  phr2000  阅读(46)  评论(0编辑  收藏  举报