Nim博弈

目前有任意堆石子,每堆石子个数也是任意的,双方轮流从中取出石子,规则如下:
  ①每一步应取走至少一枚石子;每一步只能从某一堆中取走部分或全部石子;
  ②如果谁取到最后一枚石子就胜。
设(a,b,c,d…)为每堆石子的个数(石子个数>=0),甲乙两人游戏,且甲先行。

若起始态a⊕b⊕c⊕… = 0,则该状态为必败态,反之为必胜态。
Nim博弈结论证明:
明显当a1=a2=……=an = 0的时候成立,(0)为必败态。当(a1,a2……an)不全等于0的时候,有2种情况:
  ① k = a1⊕a2⊕…⊕am⊕…⊕an ≠ 0,此时k的二进制最高位为1,则一定存在am它的最高位也为1,因为异或运算保证了当运算结果为1的时候,某一方一定是1,于是ap = am ⊕ k < am【异1同0,两个最高位的1异或得到0】,此时把am替换为ap,(a1⊕a2⊕…⊕ am ⊕…⊕an) => (a1⊕a2⊕…⊕ ap ⊕…⊕an) = (a1⊕a2⊕…⊕ am ⊕ k ⊕…⊕an)=(a1⊕a2⊕…⊕ am ⊕…⊕an⊕ k) = k ⊕ k = 0,这个过程证明了 当 a1⊕a2⊕……⊕an ≠ 0的时候,存在有效的取法ap = am ⊕ k使得取后的 结果a1⊕a2⊕……⊕an = 0。
  ② k = a1⊕a2⊕…⊕am⊕…⊕an = 0,根据游戏规则,必须从am中至少取走1个成为ap < am,可以用反证法得到a1⊕a2⊕…⊕ap⊕…⊕an ≠ 0,假设a1⊕a2⊕…⊕ap⊕…⊕an = 0,那么(a1⊕a2⊕…⊕am⊕…⊕an) = (a1⊕a2⊕…⊕ap⊕…⊕an) = 0,两边依次同时异或aj(j从1递增到n,j ≠m,p),就可以得到ap = am,与前提ap < am矛盾,假设不成立,这个过程证明了 当a1⊕a2⊕…⊕am⊕…⊕an = 0的时候,不存在有效的取法让取后的结果a1⊕a2⊕…⊕am⊕…⊕an = 0。

综上所述,当a1⊕a2⊕……⊕an ≠ 0的时候,存在有效的取法,令到a1⊕a2⊕……⊕an = 0,而a1⊕a2⊕……⊕an = 0不存在有效的取法使得a1⊕a2⊕……⊕an = 0【也就必胜态有办法让下一步为必败态,必败态下一步一定为必胜态】,随着局面的变化,a1⊕a2⊕……⊕an = 0最终会变成(0,0,0……0)也就是(0)必败态,所以如果当前局面(a1,a2……an)中,a1⊕a2⊕……⊕an = 0,那么当前局面是必败态。

阶梯Nim游戏:
在一个阶梯上,每层有若干个石子,每次可以将某一层中若干个石子移动到他下一层阶梯中去,当所有石子被推到阶梯下后便无石子可移动,最先不可移动的一方失败。
阶梯形象概述
1.只考虑对偶数堆的操作:如果对方将偶数堆的石子推向了奇数堆,那么我们就可以把这些石子再往左推推向更左边的偶数堆——这样一个回合,奇数堆中的状态并没有改变,玩家的顺序也并没有改变,但是偶数堆却慢慢地向阶梯下移,也就是说对偶数堆操作的情况我们不用考虑;
2.只考虑对奇数堆操作:玩家将奇数堆中的石子推到偶数堆,可以看做是从奇数堆中取走了若干石子,即被转化为了Nim游戏。
即当奇数阶梯上石子数的异或和为0时先手为必败态,反之即为必胜态。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值