7.13 $\text{Nim & SG(x)}$
作者:互联网
\(\large \text{Date: 7.13}\)
\(\rm Nim\) 游戏 & \(\rm SG\) 函数
$ \rm Nim$ 游戏
先摆结论:
\(\large\left\{\begin{aligned}\text{xor}_{i=1}^na_i=0 \to先手必败\\\rm else \to先手必胜\end{aligned}\right.\)
感性理解:若干个数,\(a_1,a_2,...,a_n\),将它们化为二进制串,若每一个二进制位上都有偶数个 \(1\),那么完全存在一种后手必胜策略,即先手取了若干个 \(1\),后手就将对应的 \(1\) 取完,这样后手就是必胜的。这样表现出来就是 \(\text{xor}_{i=1}^na_i=0\)。反之,若不满足这一条性质,那先手完全可以取出上述模型中单独的 \(1\),让局面变成对于后手玩家的先手必败策略。
由此衍生出一个结论: 先手必胜局面 \(\to\) 后手必败局面。
但是这仅仅是一个 \(\rm SG\) 函数的衍生结论。
什么是 \(\rm SG\) 函数?
有向图游戏与 SG 函数
有向图游戏是一个经典的博弈游戏——实际上,大部分的公平组合游戏都可以转换为有向图游戏。
在一个有向无环图中,只有一个起点,上面有一个棋子,两个玩家轮流沿着有向边推动棋子,不能走的玩家判负。
定义 \(\rm mex\) 函数的值为不属于集合 \(S\) 中的最小非负整数,即:
例如 \(\text{mex}(\{0,2,4\})=1,\text{mex}(\{1,2\})=0\)
对于状态 \(x\) 和它的所有 \(k\) 个后继状态 \(y_1,y_2,...,y_k\),定义 \(\rm SG\) 函数:
\(\text{SG}(x)=\text{mex}\{_{i=1}^k\text{SG}(y_i)\}\)
而对于由 \(n\) 个有向图游戏组成的组合游戏,设它们的起点分别为 \(s_1,s_2,...,s_n\),则有定理:当且仅当 \(\text{xor}_{i=1}^n\text{SG}(s_i)\not= 0\) 时,这个游戏是先手必胜的。同时,这是这一个组合游戏的游戏状态 \(x\) 的 SG 值。
这一定理被称作 Sprague-Grundy 定理(Sprague-Grundy Theorem), 简称 SG 定理。
\(\rm SG\) 定理适用于 任何公平的两人游戏, 它常被用于决定游戏的输赢结果。
计算给定状态的 Grundy 值的步骤一般包括:
-
获取从此状态所有可能的转换;
-
每个转换都可以导致 一系列独立的博弈(退化情况下只有一个)。计算每个独立博弈的 Grundy 值并对它们进行 异或求和。
-
在为每个转换计算了 Grundy 值之后,状态的值是这些数字的 。
-
如果该值为零,则当前状态为输,否则为赢。
标签:有向图,游戏,Nim,text,Grundy,rm,SG 来源: https://www.cnblogs.com/Doge297778/p/16472902.html