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,那么当前局面是必败态。

你可能感兴趣的:(博弈论,博弈论,acm竞赛)