【学习笔记】博弈论
Nim 游戏
\(n\) 堆物品,每堆有 \(a_i\) 个,两个玩家轮流取走任意一堆的任意个物品,但不能不取。取走最后一个物品的人获胜。
博弈图
如果将每个状态视为一个节点,并向它的所有后继状态连边,就可以得到一个 博弈状态图。
定义必胜状态(N)为 当前的先手 必胜的状态,定义必败状态(P)为 当前的先手 必败的状态。由此我们可以得到一些性质:
- 一个没有后继的节点一定是 P 状态,且只有一个,即全 \(0\) 状态
- 对于一个 N 状态,它的后继一定存在一个 P 状态(他走完后把必败状态留给对手)
- 对于一个 P 状态,它的后继一定全都是 N 状态(不管它怎么走对手都能赢)
由此我们可以得到,一个博弈图是 单源单汇,且上面的节点不是 P 状态就是 N 状态。
证明: 考虑归纳,显然对于一个节点时一定成立的,因为是 P 状态。若对于前 \(i - 1\) 个节点都成立,那么新加入节点 \(i\),要么无 P 状态为 P 状态,要么有 P 状态为 N 状态。
Nim 和
定义 Nim 和为 \(a_1\oplus a_2\dots \oplus a_n\),则当且仅当 Nim 和为 \(0\) 时为 P 状态, 大于 \(0\) 时为 N 状态。
证明:
要证明 Nim 和是对的,只需要证明:
- 没有任何后继的节点 Nim 和为 \(0\)
- 对于一个 Nim 和 \(=0\) 的点,它所有的后继 Nim 和都 \(>0\)
- 对于一个 Nim 和 \(>0\) 的点,它的后继存在 \(=0\) 的点
对于第一条,只有全 \(0\) 状态没有后继,它的 Nim 和一定是 \(0\)。
对于第二条,假设要将 \(a_i\) 改为 \(b_i\),则要将 Nim 和异或 \(a_i\oplus b_i\),由于 \(a_i\ne b_i\),所以 Nim 和一定不为 \(0\)。
对于第三条,设 Nim 和为 \(k\),要让它变为 \(0\),只需将 \(a_i\) 改为 \(a_i \oplus k\)。设 \(k\) 的最高位 \(1\) 是在第 \(d\) 位,则必然可以找到一个 \(a_i\) 使得 \(a_i\) 第 \(d\) 位也是 \(1\),由于 \(2^d > \sum_1^{d-1} 2^i\),所以 \(a_i \oplus k < a_i\),所以这样移动是合法的。
有向图游戏和 SG 函数
有向图游戏是一个经典的博弈游戏——实际上,大部分的公平组合游戏都可以转换为有向图游戏。
SG 函数
假设 \(x\) 节点有 \(k\) 个后继 \(y_1,y_2\dots y_k\),则 \(SG(x) = mex(SG(y_1),SG(y_2)\dots SG(y_k))\)
若 SG 函数值为 \(0\) 则为 P 状态否则为 N 状态。
证明:
同理像证明 Nim 和一样证明 SG 函数。
对于第一条,若它没有任何后继则 SG 函数显然是 \(0\)
对于第二条,若它的 SG 函数是 \(0\),则它的后继 SG 函数值肯定不包含 \(0\),即全不为 \(0\)
对于第三条,若它的 SG 函数不为 \(0\),则它的后继 SG 函数肯定包含 \(0\)
可以发现 SG 函数是一个 递归定义,所以求 SG 函数的时候需要在博弈图上递归,复杂度是 \(O(状态数)\) 的,这样就可能会导致超时问题,因此有时可以暴力打一些表找找规律,比如 Nim 游戏中 SG 函数是 Nim 和其实就是一种用规律快速求 SG 函数的方法。
SG 定理
SG 定理:一个有 \(n\) 个有向图的游戏,每个图的起点分别为 \(s_1,s_2\dots s_n\),则若 \(SG(s_1)\oplus SG(s_2)\dots \oplus SG(s_n)\) 大于 \(0\) 则为 N 状态,否则为 P 状态。
证明:
还是与 Nim 类似,只不过把 \(1\) 个图换成 \(n\) 个图罢了。
- \(n\) 个没有任何后继的节点 SG 异或和为 \(0\)
- 对于 \(n\) 个 SG 异或和 \(=0\) 的点,不管怎么走 SG 异或和仍然都 \(>0\)
- 对于 \(n\) 个 SG 异或和 \(>0\) 的点,存在一种走法使得SG 异或和 \(=0\)
对于第一条,\(n\) 个全零状态的 SG 异或和肯定是 \(0\)
对于第二条,设要从 \(x\to y\),易知 \(SG(x)\ne SG(y)\),所以走后异或和一定不为 \(0\)
对于第三条,设 SG 异或和为 \(k\),要从 \(SG(x)\) 变为 \(SG(x)\oplus k\)。从前文可知:必然存在 \(x\) 使得 \(SG(x) > SG(x)\oplus k\)。而对于每一个 \(x\),若它的 SG 不为 \(0\),则它后继的 SG 值必然可以取到 \(0\) 到 \(SG(x)-1\) 的每一个数,所以一定有一种走法使新的 SG 异或和 \(=0\)。

浙公网安备 33010602011771号