博弈论-Nim游戏

题目描述

给定n堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。
问如果两人都采用最优策略,先手是否必胜。

对于这个问题如果我们每次都有石头可以拿直到取光石头那么就一定可以获胜,那么不妨设集合S{a1…an},分别为n堆石头的数量.
我们先从简单的一堆石头分析,先手一次可以取完石头,必胜.
再从两堆石头分析,当两堆石头数量不一样时,先手将两堆时刻保持一样,后手必败
同理当两堆石头数量一样时,先手必须取石头,那么后手时刻保持两堆石头数量时刻一样后手必胜
结论:a1⊕a2⊕…⊕an≠0,先手必胜;否则先手必败
证明
操作到最后时,每堆石子数都是0,0⊕0⊕…0=0
在操作过程中,如果 a1⊕a2⊕…⊕an=x≠0。那么玩家必然可以通过拿走某一堆若干个石子将异或结果变为0。
证明:不妨设x的二进制表示中最高一位1在第k位,那么在a1,a2,…,an中,由于异或的特点必然有一个数ai,它的第k为时1,且ai⊕x<ai(x前面全为0保持ai不变最高位1被异或成0一定变小),那么从第i堆石子中拿走(ai−ai⊕x(ai−ai⊕x)个石子,第i堆石子还剩ai−(ai−ai⊕x)=ai⊕xai−(ai−ai⊕x)=ai⊕x,此时a1⊕a2⊕…⊕ai⊕x⊕…⊕an=x⊕x=0
在操作过程中,如果 a1⊕a2⊕…⊕an=0a1⊕a2⊕…⊕an=0,那么无论玩家怎么拿,必然会导致最终异或结果不为0。
反证法:假设玩家从第i堆石子拿走若干个,结果仍是0。不妨设还剩下a′个,因为不能不拿,所以0≤a′<ai0≤a′<ai,且a1⊕a2⊕…⊕a′⊕…⊕an=0。那么(a1⊕a2⊕…⊕ai⊕…an)⊕(a1⊕a2⊕…⊕a′⊕…⊕an)=ai⊕a′=,则 ai=a′,与假设0≤a′<a矛盾。
基于上述三个证明:

  1. 如果先手面对的局面是a1⊕a2⊕…⊕an≠0,那么先手总可以通过拿走第i堆(ai⊕x)个石头,将局面变成a1⊕a2⊕…⊕an=0。如此重复,最后一定是后手面临最终没有石子可拿的状态。先手必胜。
  2. 如果先手面对的局面是a1⊕a2⊕…⊕an=0,那么无论先手怎么拿,都会将局面变成a1⊕a2⊕…⊕an≠0,那么同理后手总可以拿走第i堆(ai⊕x)个石头,将局面变成a1⊕a2⊕…⊕an=0。如此重复,最后一定是先手面临最终没有石子可拿的状态。先手必败。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值