博弈论小记

以下我们都考虑这样一种游戏:

  1. 两个人,轮流进行;

  2. 游戏总是在有限步内结束;

  3. 同一个状态不可能多次抵达,且没有平局;

  4. 每个时刻的合法决策集合仅与当前局面有关,而与游戏者无关;

  5. 不能操作者输。

我们定义:

必败态:无论如何先手必败的状态(局面)。

必胜态:先手存在必胜策略的状态(局面)。

后继状态:从当前状态走一步能够到达的所有局面。

SG 函数

mex 函数:集合中最小的没有出现的自然数。

将每个局面映射到一个自然数。终态(必败态)的 SG 函数值为 0,其他每个局面的 SG 函数值为其所有后继局面的 mex 值。

一个局面必胜当且仅当其 SG 函数不为 0。对应地,一个局面必败当且仅当其 SG 函数等于 0

如果一个游戏由一堆游戏组成,每次选择一个游戏走一步,这样的游戏称为组合游戏。组合游戏中一个局面的 SG 函数值等于其所有子游戏的 SG 函数值的异或和。

同样地,此时一个局面必胜当且仅当其 SG 函数不为 0,一个局面必败当且仅当其 SG 函数等于 0

Nim 游戏

n 堆石子,每堆 ai 个,每次可以在任一堆中取出任意多个石子,取到最后无法取的人输。

分析这个游戏,实际上是一个组合游戏。每个子游戏就是一堆石子,每次取出任意多个,不能取的输。我们来分析这个游戏的 SG 函数。终态是剩 0 个石子,此时先手必败,SG 函数为 0。对于一个石子的状态,其后继只有终态,而终态 SG 函数为 0,所以只有一个石子的状态的后继状态的 SG 函数构成的集合为 {0},所以其 SG 函数为 1。对于两个石子的状态,其后继状态为剩 0 个和剩 1 个石子,这两个状态的 SG 函数分别为 0,1,所以其 SG 函数为 2。观察发现一个状态的 SG 函数值即为其中石子个数。

所以对于这 n 个子游戏,其 SG 函数值分别为 ai,所以当前局面的 SG 函数值就是所有 ai 的异或和。所以当且仅当所有 ai 的异或和为 0 时先手必胜,否则先手必败。这个就是 Nim 游戏的经典结论。

若当前局面异或和不为 0,可以证明一定可以通过某种方法来取出一些石子使得操作后所有数异或和为 0。若当前局面异或和为 0,则也可以证明无论如何取,取之后的所有数异或和不为 0

阶梯博弈

n 级台阶,从左往右依次变高,每级台阶上有 ai 个石子,每次可以把一级台阶上的石子往比它低一层的台阶上扔(如果这级台阶还不是最低的台阶),每次可以扔任意多个。不能操作者输。

结论:等价于从左往右奇数位上的 Nim 游戏。

操作方法:假设我们必胜。如果对面动了偶数位的石子,则把对面移到奇数位的石子再往下移到偶数位。如果对面动了奇数位的石子,我们按照 Nim 游戏的走法从某个奇数位的阶梯上取若干个石子往下扔。这样能够保证我们是必胜的。

为什么是奇数位?因为如果是偶数位的话,当对面把奇数位的石子移到最低的阶梯上时,我们就无法再把这些石子往下扔了。

例题:P3480P8382

二分图博弈

一张二分图,一个棋子。棋子一开始在一个点上,每次一个人来选择一条边,把棋子沿这条边移到另一个点。走过的点不能再走,不能走的输。

结论:先手必胜当且仅当棋子一开始在最大匹配的必须点上。先手必败当且仅当棋子一开始不在最大匹配的必须点上。

接下来称最大匹配的必须点为匹配点,否则为非匹配点。

  1. 如果当前在匹配点,此时先手顺着匹配边走向另一个点,后手无论怎么走都会回到匹配点。假设后手没有回到匹配点,则可以将任意一组匹配中的当前点换成后手走到的点,从而当前点不是匹配点,矛盾。

  2. 如果当前在非匹配点,则先手无论如何走都会走到匹配点。如果先手没有走到匹配点,则选中当前点和这个点相连的边可以使得最大匹配加一,矛盾。

所以当且仅当先手在匹配点上时存在必胜策略。

例题:P1971

posted @   forgotmyhandle  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示