NP 状态描述
¶- 无法进行任何移动的局面为 P-position
- 可以移动到 P-position 的局面为 N-position
- 任意移动都到达 N-position 的局面为 P-position
Nim 游戏
¶Nim 游戏是组合游戏中的经典游戏,描述如下:有 堆石子,第 堆有 颗石子。、 两人轮流取石子,每次仅能选择一堆不为空的石子进行操作:取走至少一颗石子。不能操作的人输。
关于 Nim 游戏有一个著名的结论:当且仅当
时,先手获胜;否则后手胜。证明很简单,当
时,设 的二进制最高位为 ,那么一定存在一个 其第 位为 。我们只需要从第 堆石子中取走
个 ,那么新的游戏状态为:
事实上,这也是构造 Nim 游戏方案的方法。接下来,介绍 函数和 定理,
函数和 定理是解决一类组合游戏的有力工具。
SG 函数
¶对于任意状态 ,定义 ;其中, 是 的所有后继状态的
函数值集合, 表示不在 中的最小非负整数。 特别地,当 为空集,即
没有后继节点时,。不难验证:
SG 定理
¶游戏和的 函数等于各子游戏的 函数的 和。
具体来说,若游戏 可以看做由 个互不干扰的子游戏
构成;也就是对于游戏任一状态 ,只能选择一个子游戏
进行操作,得到状态
;那么有:
不妨假设当前游戏状态为 ;记 的所有后继状态集合为 ;并记 。我们的证明分两步:
.
.
step 1
¶记 ;因为 ,所以必有:若 的二进制最高位为 ,则 的二进制第 位也为 ;否则必有 。于是必有 满足
的二进制第 位为 。令 ,不难验证:。所以,根据 函数的定义可知,子游戏 必有一个 值为 的后继节点 。此时,
step 2
¶不妨操作子游戏 到状态 得到游戏状态 。由 函数的定义可知,
,即 。那么:
小结
¶由 函数的定义,不难联系到 Nim 游戏。实际上,我们可以用解决 Nim 游戏的方法来构造一般组合游戏的方案。只需要顺着将 变成 0 的方向做出决策就好了。在实际问题上,通常 是一个很大的数,但是一般 函数是有规律的(总要给点活路= =),然后只要本地打表找规律。。。
练习
¶Related
¶