通常的Nim游戏的定义是这样的:有若干堆石子,每堆石子的数量都是有限的,合法的移动是“选择一堆石子并拿走若干颗(不能不拿)”,
如果轮到某个人时所有的石子堆都已经被拿空了,则判负(因为他此刻没有任何合法的移动)。
*这游戏看上去有点复杂,先从简单情况开始研究吧。
如果轮到你的时候,只剩下一堆石子,
那么此时的必胜策略肯定是把这堆石子全部拿完一颗也不给对手剩,然后对手就输了。
*如果剩下两堆不相等的石子,必胜策略是通过取多的一堆的石子将两堆石子变得相等,
以后如果对手在某一堆里拿若干颗,你就可以在另一堆中拿同样多的颗数,直至胜利。
如果你面对的是两堆相等的石子,那么此时你是没有任何必胜策略的,
反而对手可以遵循上面的策略保证必胜。
*现在我们如何从两堆的取子策略扩展到任意堆数中呢?
*首先来回忆一下,每个正整数都有对应的一个二进制数,
于是,我们可以认为每一堆硬币数由2的幂数的子堆组成。
这样,含有57枚硬币大堆就能看成是分别由数量为2^5、2^4、2^3、2^0的各个子堆组成。
*现在考虑各大堆大小分别为N1,N2,……Nk的一般的Nim取子游戏。
将每一个数Ni表示为其二进制数(数的位数相等,不等时在前面补0):
N1 = as…a1a0
N2 = bs…b1b0
……
Nk = ms…m1m0
如果每一种大小的子堆的个数都是偶数,我们就称Nim取子游戏是平衡的,
而对应位相加是偶数的称为平衡位,否则称为非平衡位。
因此,Nim取子游戏是平衡的,当且仅当:
as + bs + … + ms 是偶数
……
a1 + b1 + … + m1 是偶数
a0 + b0 + … + m0是偶数
于是,我们就能得出获胜策略:
游戏人I能够在非平衡取子游戏中取胜,而游戏人II能够在平衡的取子游戏中取胜。
*我们以一个两堆硬币的Nim取子游戏作为试验。设游戏开始时游戏处于非平衡状态。
这样,游戏人I就能通过一种取子方式使得他取子后留给游戏人II的是一个平衡状态下的游戏,
接着无论游戏人II如何取子,再留给游戏人I的一定是一个非平衡状态游戏,如此反复进行,
当游戏人II在最后一次平衡状态下取子后,游戏人I便能一次性取走所有的硬币而获胜。
而如果游戏开始时游戏牌平衡状态,那根据上述方式取子,最终游戏人II能获胜。
*下面应用此获胜策略来考虑 4堆 的Nim取子游戏。
其中各堆的大小分别为7,9,12,15枚硬币。
用二进制表示各数分别为:0111,1001,1100和1111。于是可得到如下一表:
由Nim取子游戏的平衡条件可知,此游戏是一个非平衡状态的取子游戏,
因此,游戏人I在按获胜策略进行取子游戏下将一定能够取得最终的胜利。
具体做法有多种,游戏人I可以从大小为12的堆中取走11枚硬币,使得游戏达到平衡(如下表),
之后,无论游戏人II如何取子,游戏人I在取子后仍使得游戏达到平衡。
同样的道理,游戏人I也可以选择大小为9的堆并取走5枚硬币而剩下4枚,
或者,游戏人I从大小为15的堆中取走13枚而留下2枚。
所以归根结底,Nim游戏的核心就是判断初始状态是不是平衡状态
非平衡状态先手必胜,平衡状态后手必胜