博弈论
创建时间:2025-12-12
公平组合游戏基础
称一个游戏为公平组合游戏(ICG)当且仅当其满足:
- 共 \(2\) 个玩家,规则对等
- 游戏状态有限,一定能结束
- 两个玩家轮流行动,不能在行动时判胜负
- 在任意局面,无法分辨两个玩家
巴什游戏
设有 \(n\) 枚石子(\(n\ge 1\)),两名玩家轮流操作,每次可以取走 \(1 \sim m\) 枚石子,但不能不取,取走最后一枚石子的玩家获胜,问先手玩家是否有必胜策略。
显然,当 \(n=1,2,3,\cdots,m\) 时,先手只需要全部取走即可,故先手必胜。
当 \(n=m+1\) 时,不论先手取几枚石子,后手都能一次取完剩下的石子,故此时先手必败。
当 \(m+1<n<2(m+1)\) 时,先手可以取 \(n-(m+1)\) 枚石子,这样留给后手的将是 \(n=m+1\) 的必败局面,故先手有必胜策略。
以此类推,很容易发现当 \((m+1)\nmid n\) 时,先手必胜;当 \((m+1)\mid n\) 时,先手必败。
事实上,这个结论很好证明。当 \((m+1)\mid n\) 时,设先手拿走了 \(x\) 枚石子,后手可以拿走 \(m+1-x\) 枚石子,这样石子总数减少了 \(m+1\),仍是 \(m+1\) 的倍数,当 \(n\) 减少至 \(n=m+1\) 时,先手就输了;当 \((m+1) \nmid n\) 时,先手可以拿走 \(n \bmod (m+1)\) 枚石子,这样便化为 \((m+1) \mid n\) 的必败局面,所以当 \((m+1) \nmid n\) 时先手必胜。
故巴什游戏的结论为:当且仅当 \((m+1)\nmid n\) 时,先手有必胜策略。
Nim 游戏
设有 \(n\) 堆石子,第 \(i\) 堆有 \(a_i\) 枚石子,两名玩家轮流操作,每次可以在一堆石子中取走任意数量枚石子(可以一次将一堆取完),但不能不取,当某名玩家无法操作时判该玩家输,问何时先手有必胜策略。
结论:当且仅当 \(a_1 \oplus a_2 \oplus a_3 \oplus \cdots \oplus a_n \neq 0\) 时先手必胜,否则先手必败。
证明:
首先,当 \(1\le i\le n, \forall a_i=0\) 时,即一颗石子都没有,显然先手必败。
当 \(a_1 \oplus a_2 \oplus a_3 \oplus \cdots \oplus a_n \neq 0\) 时,只要该状态存在一个后继状态满足 \(a'_1 \oplus a'_2 \oplus a'_3 \oplus \cdots \oplus a'_n = 0\),即可证明当前状态是必胜状态。这等价于求证 \(\exist j< a_i,a_1 \oplus a_2 \oplus \cdots \oplus a_{i-1} \oplus j \oplus a_{i+1} \oplus \cdots \oplus a_n=0\)。令 \(S=a_1 \oplus a_2 \oplus a_3 \oplus \cdots \oplus a_n\),则 \(\exist a_i > S \oplus a_i\)。设 \(S\) 的最高位为 \(k\),那么一定存在 \(a_i\) 满足 \(a_i\) 的第 \(k\) 位为 \(1\),对于这个 \(i\),就有 \(a_i> S\oplus a_i\)。
当 \(a_1 \oplus a_2 \oplus a_3 \oplus \cdots \oplus a_n = 0\) 时,只要该状态的所有后继状态都满足 \(a'_1 \oplus a'_2 \oplus a'_3 \oplus \cdots \oplus a'_n = 0\)。这等价于求证 \(\forall j< a_i,a_1 \oplus a_2 \oplus \cdots \oplus a_{i-1} \oplus j \oplus a_{i+1} \oplus \cdots \oplus a_n\neq 0\)(含义与上文类似)。所以 \(\forall j<a_i,j\oplus a_i \neq a_1 \oplus a_2 \oplus a_3\oplus \cdots \oplus a_n=0\)。因为 \(j\neq a_i\),上式显然成立。
证毕。
SG 函数和 SG 定理
很多题目中很难通过大眼观察法直接得出结论,故需引进一个新的概念:SG 函数(Sprague–Grundy Function)。
SG 函数
不妨将巴什游戏的状态抽象成一个有向无环图,其中节点 \(i\) 表示 \(n=i\) 的局面。对于所有 \(j<i \le j+k\),连边 \(i\rightarrow j\),表示状态 \(i\) 可以转移至 \(j\)。
定义 \(SG(0)=0\),\(SG(i)=\textup{mex}_{0\le j<i\le j+m}\{SG(j)\}\),即 \(SG(i-m),SG(i-m+1),\cdots,SG(i-1)\) 中最小没出现过的自然数。
根据博弈 DP 知:当 \(SG(n)>0\) 时,先手必胜;当 \(SG(n)=0\) 时,先手必败。
例如当 \(m=2\) 时:
| \(n\) | \(0\) | \(1\) | \(2\) | \(3\) | \(4\) | \(5\) | \(6\) | \(7\) | \(8\) | \(\cdots\) |
|---|---|---|---|---|---|---|---|---|---|---|
| \(SG(n)\) | \(0\) | \(1\) | \(2\) | \(0\) | \(1\) | \(2\) | \(0\) | \(1\) | \(2\) | \(\cdots\) |
观察得:\(SG(n)=n \bmod 3\)。
同样可以得到:\(SG(n)= n\bmod (m+1)\)。所以当 \(n \bmod (m+1)>0\) 时,先手必胜;当 \(n \bmod (m+1)=0\) 时,先手必败。
将一个先手必胜局面称为一个 N-position,否则称为一个 P-position。
我们发现,SG 函数本质上描述的是一个状态可以转移到的状态,当 \(SG(i)=0\) 时,\(i\) 可以转移到的状态中不存在 \(SG(j)=0\),即 \(i\) 无法转移到一个 P-position,故 \(i\) 是一个 N-position。反之亦然。
SG 定理
考虑 Nim 游戏,设 \(SG(x)\) 表示某堆石子的数量为 \(x\) 时的状态。易知:\(SG(x)=x\)。
现在有 \(n\) 堆石子,
阶梯 Nim 游戏
阶梯 Nim 游戏是 SG 函数、SG 定理的一个经典应用。
有 \(n\) 级台阶,每级台阶上有一堆石子,第 \(i\) 级上有 \(a_i\) 枚。两名玩家轮流操作,每次可以选择一个 \(i>2\),将第 \(i\) 堆石子中若干枚放至第 \(i-1\) 级台阶上,也可以将第 \(1\) 级台阶上的若干枚石子拿走,但不能不操作。拿走最后一枚石子的玩家获胜。问先手是否有必胜策略。
注意到第 \(i\) 级台阶上的石子需要参与 \(i\) 次移动才能被拿走,故想到将 \(i\) 按奇偶分块考虑。
考虑所有石子都在第 \(2\) 级台阶上。不管先手从第 \(2\) 级台阶上拿走了多少枚石子放到第 \(1\) 级台阶上,后手都可以将第 \(1\) 级上的石子拿走,这样所有石子依旧都在第 \(2\) 级台阶上。当所有石子都被拿走时,后手就赢了。故这是一个 P-position。
当所有石子都在偶数级台阶上时类似,不管先手从第 \(i\) 级台阶上拿多少石子放到第 \(i-1\) 级台阶,后手都可以将这些石子再放到 \(i-2\) 级台阶,这样所有石子都还在偶数级台阶上,当所有石子都在第 \(2\) 级台阶上时后手就赢了。故这也是一个 P-position。
所以先手对偶数级台阶操作时无意义的,后手都可以模仿先手的操作将先手移动的石子继续往下移到偶数级台阶上。
又因为当所有石子都在偶数级台阶上时先手必败,所以偶数级台阶对答案是无影响的!
当第 \(2k+1\) 级台阶上的石子被移动到第 \(2k\) 级台阶或第 \(1\) 级台阶上的石子被拿走时,这些石子要么移动到偶数级台阶上,要么被拿走,对之后的答案都没有影响,可以认为直接被消除。
这样问题便转化为了普通 Nim 游戏:先后手每次对奇数级台阶操作,最后一次操作的玩家获胜(因为最后一次操作之后为 P-position)。
综上所述:当 \(\oplus a_{2k+1} > 0\) 时,先手必胜;否则,先手必败。
其他应用
SG 函数只有在原问题可以抽象为一张有向无环图时可以使用,而公平组合游戏就是 SG 函数使用场景的一个部分。
P4018 Roy&October之取石子(类似巴什游戏)
HDU-1850 Being a Good Boy in Spring Festival(Nim游戏)
HDU-1848 Fibonacci again and again(SG函数)
P2148 [SDOI2009] E&D(SG函数)
P2575 高手过招(SG 函数)
P4279 [SHOI2008] 小约翰的游戏(反 Nim 游戏)
P3480 [POI 2009] KAM-Pebbles(阶梯 Nim 游戏)

浙公网安备 33010602011771号