风体脑训练吧 关注:27贴子:61
  • 4回复贴,共1

玩尼姆博弈的一点心得 #尼姆博弈#风体脑训练

只看楼主收藏回复

最近在风体脑训练中玩尼姆博弈,有点心得,与大家分享交流一下。
规则:有N组数字,你和电脑轮流取数。每次只能选一组来取数,至少取一个数,最多可以取走整组数。最后取完全部剩余数的为胜利方。
我们不难发现,如果只有两组数(n,n),如果我们先取,不管我们取几个,最后都是电脑赢。我们把这种状态叫做平衡态。
进而我们可以猜想如果扩展到多组数,是不是也可以通过某种方式让这些数字达到一种平衡态。这样只要我们每次给对手留下的数字都是一种平衡态,我们就可以保持必胜。
证明过程略,直接说结论。
如果所有组数的二进制异或值为0,就是平衡态。
听不懂?那我说人话:
比如(3,5,7)三组数,我们把每组数都拆分成1+2+4+8+16……的形式,拆大不拆小,就是说能拆成8,你就不要拆成两个4。
这样(3,5,7)就拆成(2+1,4+1,4+2+1)。
我们数一下4有两个,2有两个,1有三个。我们让每个4,每个2,每个1都去配对,发现只有一个1没法配对,这样我们只要从含有1的组里把其中一个1拿掉就达到了平衡态。
比如从3中拿掉1,变成(2,5,7),这就是平衡态了。
也可以从5中拿掉1,或者从7中拿掉1,都是可以的,自己验证一下。
再举个例子:(2,11,12),拆成(2,8+2+1,8+4)。我们发现4和1都无法配对,那么我们就去找哪组数里含有无法配对的最大数,4和1无法配对,那我们就找那组数里含有4,第三组8+4里含有4。
然后重点来了,按照上面说的,如果4和1无法配对,那我们就需要在这组里拿掉4和1。但是这组里只有4,没有1,怎么办呢?我们的原则是:有就减去,没有就加上。这样第三组数就变成了8+4-4+1=9。
简单来说就是:
1、先确定无法配对的数:4,1
2、找到含有无法配对的最大数的组:8+4
3、让这些数8,4,4,1 重复的去掉,其余的加起来,就是这组需要变成的数。
如果你看懂了,我们继续加大难度:

我对于这种多组尼姆的方法:
1. 先找相同数,(a,a,b,b,c,c)这种显然是平衡态。所以我们先找出相同的数把他们过滤掉,看你运气了。本题D组和E组的两个3就消掉了。(3,3)=0
2. 其次找相邻数,2n和2n+1,也就是两数差1,奇大偶小,这样的两个数对对碰(异或)以后就是1。如果奇小偶大,那得拆开算。本题14和15就碰成1了。(14,15,3,3)=1
3. 再找相近数,多近算近,我的原则是以1,2,4,8,16,32,64……做间隔每个间隔内的两个数都可以叫相近数。本题(54,61)相近。一般的方法是拆成(32+16+4+2,32+16+8+4+1),但是对我来说在心里记忆这么多数字难度有点大,所以我投机取巧了一下,因为这两个数离63比较近,为什么要用63呢,因为63=32+16+8+4+2+1,即二进制的111111。所以我就比较这两个数和63分别差多少。
63-54=9=8+1
63-61=2
所以54和61就碰成了8+2+1。 再和上面的(14,15,3,3)=1相碰就可以得到 (14,54,15,3,3,61)=8+2
4. 还剩两个数22和39,我们先碰小的,为什么呢?你让前面碰剩下的8+2和22去碰,得到几,就把39变成几就可以了。但是如果你先用8+2和39碰,可能得到的数大于22,过程比较麻烦。22=16+4+2,和8+2一碰得到16+8+4,这样把39变成16+8+4=28就可以让本题达到平衡态。

轮到电脑:

第二轮之后,重点是你要看清电脑取走了哪一组的几个。这样我们就不需要把八组数重新计算一遍。而只需要看看电脑破坏了哪几个数的平衡态即可。
电脑从F组61拿走了45个,剩下16个。
就是32+16+8+4+1变成了16,变化的位数是32,8,4,1。
那我们就需要找到哪组数里含有32?只有B组54含有。那我们就按照前面的原则:有就减去,没有就加上。
54可以拆成32+16+4+2 -32+8-4+1 =27


然后电脑从E组拿走2个,相同组最好办,电脑拿几个,我们也拿几个,平衡态依旧。
我们D组取2,电脑E组取1,我们D组也取1。

电脑从B组27拿走7个,由16+8+2+1变成16+4,变化的数:8,4,2,1。
我们发现14和15里都含有8,选哪个呢?都可以。但是心算快的同学马上发现15=8+4+2+1,所以直接把15都拿走就可以了。这样这组就变成0。0越多题目难度就越低,而且游戏有时间限制,0越多游戏结束的越快。所以这种机会不要错过。当然你非要在A组拿走13个也未尝不可。
越往后题目就越简单,算起来就越快,我就不啰嗦了。
有人会说,我一时走神了,没看到电脑在哪组拿走了几个怎么办?那你就把现在的状态当成一道新题目重新做呗,
刚才写到相近数的间隔时,我马上找了个例子把自己这个想法给反驳了。
比如(15,31),这俩数不相近,但是(8+4+2+1,16+8+4+2+1)俩数一碰正好得16。
我们找相近数的目的就是碰出来的数好记,你说16好记呢还是一堆8,4,2,1好记?所以呢,这样的数对不是相近数,胜似相近数。
不要拘泥,要随机应变。手中无招,心中无招,方能克敌制胜。



IP属地:山东1楼2024-09-16 16:17回复
    不错不错,楼主写的真详细


    IP属地:四川来自Android客户端2楼2024-09-16 16:22
    回复
      三个数的情况我讲复杂了,实际把两个小点的数相碰(异或),得到的数就是第三个数该变成的数。
      四个数的情况一样,把三个相对较小的数异或,得到的数就是最后大数该变成的数。


      IP属地:山东来自Android客户端3楼2024-09-17 16:19
      回复
        三个数的情况我讲复杂了,实际上把两个相对较小的数相碰(异或),得到的数就是第三个数该变成的数。
        四个数的情况也是一样,把相对较小的三个数异或,得到的数就是第四个数该变成的数。


        IP属地:山东来自Android客户端4楼2024-09-17 16:22
        回复
          什么鬼?我自己回复不了自己的帖子?


          IP属地:山东来自Android客户端5楼2024-09-17 16:23
          回复