转自:http://www.guokr.com/article/68595/
在所有二人游戏中,最古老最有魅力的就是这个尼姆游戏了(好吧,在所有二人数学游戏中)。据说它发源于中国,有时候孩子们用纸片玩,但通常人们出门可能很少带纸片,所以我们用硬币玩。
这个游戏最流行的版本是用 12 枚硬币摆成三行。
![http://img1.guokr.com/gkimage/jp/il/pv/jpilpv.png](http://img1.guokr.com/gkimage/jp/il/pv/jpilpv.png)
游戏规则很简单,游戏双方轮流取 1 枚或多枚硬币(只能在同一行),谁拿到最后一枚就算赢。留心的朋友玩几把就可以琢磨出,只要在自己的某一个回合里留下两行多于 1 枚且数量相同的硬币,就能确保获胜。一个优势策略是,先手的人一开始就拿掉最上面一行 2 枚硬币,这样的话,离胜利就不远了。
有趣的是,有人发现,当扩展到任意多行,每行有任意枚硬币时,利用二进制,可以把这个游戏玩得风生水起。哈佛大学的数学教授布顿在 1901 年首次发表了论文详述了这个问题,也正是他,正式将这个游戏命名为尼姆游戏。
把玩家每一步操作之后的游戏局面叫做“棋局”。在布顿的论文中,如果玩家每一步操作后的棋局能保证自己获胜,那就是“安全的”,否则就是“不安全的”。每个不安全棋局都可以一步正确的操作变成安全的,而如果没有正确地操作,一个安全的棋局就会变成不安全的。
如何判定一个棋局是安全的还是不安全的呢?这就用到了前面提到的二进制。将每一行的硬币数都用二进制表示,按矩阵元素的排列方式对齐,这时候如果每一列的数( 0 或 1 )相加都为偶数(包括 0 ),那么这个棋局就是安全的,只要有一列元素相加不为偶数,那这个棋局就是不安全的。
回到我们上面说的那个流行版本上,可以看到在初始状态,它的二进制表示如下图
![http://img1.guokr.com/gkimage/f3/jd/14/f3jd14.png](http://img1.guokr.com/gkimage/f3/jd/14/f3jd14.png)
可以看到,第 2 列之和为奇数,所以这个本版的初始状态是不安全的。拿掉最上面一行的 2 枚硬币,第 1 行就变成了 1 ,从而留下了一个安全棋局。通过用其他方法试验,可以看到,拿掉第 1 行的 2 枚硬币是留下安全棋局的唯一操作。
把棋局转化成上面这个二进制表格,根据表格决定怎么操作就不会出错了。但是在玩的时候,恐怕对手没那么宽容,让你不断画表格,在脑子中计算,一不小心就出错。那么记住下面这条就很有用了:在两行里留下同样多的硬币,总能赢。在此之后,让每行硬币数量保持相等就可以了。