公平组合游戏
应该是2016年的最后一篇博客了,Goodbye 2016!
定义
公平组合游戏与平常的游戏类似,但是需要满足以下要求:
- 有两个玩家轮流行动。
- 双方的游戏方式一致。
- 双方均知道游戏的完整信息。
- 以玩家无法行动为游戏结束。
- 游戏在有限步数内结束,并且一定能分出胜负。
经典的Nim游戏就是公平组合游戏的代表,但是围棋、象棋以及井字棋这些不属于,因为这三种双方的行动不同。而且像井字棋,可能存在平局。
简单Nim游戏
现在通过一个简单的Nim游戏来介绍一些概念。这个Nim游戏规定如下:
- 一开始有
$n$ 个石子。 - 双方轮流取石子,必须取一颗或两颗。
- 无法取石子者失败。
对于这个游戏,我们想知道,在双方都十分聪明的情况下,先手/后手是否必胜。或者给出一个必胜的策略。
我们可以简单分析一下。以先手为例,如果没有石子,那么一开场就算输。如果只有一颗或两颗石子,那么先手可以马上取走并获得胜利。然而,当有
实际上,当
必胜与必败
我们规定一个位置 (例如上面的Nim游戏中石子的个数) 是
简单分析可知:
- 终止位置是
$\mathrm{P}$ 点。 - 所能到达的位置都是
$\mathrm{N}$ 点的位置是$\mathrm{P}$ 点。 - 能够到达
$\mathrm{P}$ 点的位置是$\mathrm{N}$ 点。
例如,在
图的表示
如果将每个位置用点表示,而位置之间的转移用有向边表示,那么
由于游戏是有限步数的,所以这张图必须是拓扑图。在这图上,我们可以将所有没有出边的点标记为
Sprague-Grundy定理
现在我们将位置用图
例如:
因此,对于没有出边的点,其
上图中
对此,我们可以证明下面一点:
位置
$p$ 是$\mathrm{P}$ 点当且仅当$g(p) = 0$ 。
证明:首先对于没有出边的点,它们是
对于其他的点,如果是
这样我们拥有了一个量化胜负的函数。但是对于上面这个简单Nim游戏并没有什么好处,因为上面的计算完全可以利用逻辑运算而不需要计算什么
多数情况下,你所见到的所谓Nim游戏并没有这么简单:它通常有许多堆石子,允许任意取走 (或是取走指定数量的石子),此时再去问你先手是必胜还是必败。
这并没有什么难的,我们依然可以将许多堆石子放入多元组来构成一个位置,然后依然可以计算这个位置是
事实上,即使是多堆石子,它依然可以分解为多个一堆的Nim游戏,每次行动时,玩家可以任意选择其中一个游戏来行动。不妨用
可是,多数情况下,我们不会关心这个图是什么样的,因为它实在是太复杂了。但是却有一个很好的性质:
(Sprague-Grundy定理)
令$G = G_1 + G_2 + \cdots + G_n$ ,设$G_i$ 的SG函数为$g_i$ ,$G$ 的SG函数为$g$ ,那么有:
$$ g(X) = g((x_1, x_2, \dots, x_n)) = g_1(x_1) \oplus g_2(x_2) \oplus \cdots \oplus g_n(x_n) $$ 其中
$X \in V, x_i \in V_i$ ,$\oplus$ 是异或运算。
证明:在这里不再介绍异或了,如果不了解的可以先去看一下。
根据SG函数的定义,我们只用证明以下两点就可以完成整个定理的证明:
设
- 对于所有的
$0 \leqslant a \lt b$ ,$X$ 一定存在一个可以到达的位置,满足其$g$ 值为$a$ 。 - 对于所有
$X$ 所可以到达的位置,没有$g$ 值为$b$ 。
证明
所以
证明
至此,我们已经成功证明了Sprague-Grundy定理。现在我们尝试将其运用到Nim游戏上:
首先对于一堆石子的情况,由于取走任意数量不为
现在我们有许多堆石子,每一堆石子都可以视为一个Nim游戏,那么这个游戏就是许多Nim游戏加合。根据Sprague-Grundy定理,如果每一堆石子的个数为
换言之,如果每堆石子数异或起来如果不为
-
N意为”Next”,即执行这一步的人会赢。P意为”Previous”,即执行上一步的人会赢。 ↩