Nim和anti-Nim

概述

Nim游戏是一种经典的博弈论模型。需要熟练掌握和运用。

Nim

模型

Nim游戏是指这样一种游戏:

有若干堆石子,两个玩家轮流进行操作。两个玩家公平操作,每次操作可以从任意一堆里取出任意个,但是不可以不取。当一个玩家无法进行操作时他输掉游戏。

结论

设每堆石子的个数分别为 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn,设 X = x 1    X o r    x 2    X o r    . . .    X o r    x n X=x_1\;Xor\;x_2\;Xor\;...\;Xor\;x_n X=x1Xorx2Xor...Xorxn,则若 X > 0 X>0 X>0则先手必胜, X = 0 X=0 X=0则后手必胜。其中 X o r Xor Xor是异或运算。

证明

游戏中有这两种状态:

  1. 异或和为0
  2. 异或和大于0

首先,一颗石子都没有是必败态,包含在状态1中。

假如现在处于状态1,要么当前玩家已经输掉比赛,要么他做任意操作使得状态1变为状态2。

考虑对于一个状态2,我们必然可以有一种取法,使得状态2变为状态1。取法如下:假设当前异或和为 X = x 1    X o r    x 2    X o r    . . .    X o r    x n X=x_1\;Xor\;x_2\;Xor\;...\;Xor\;x_n X=x1Xorx2Xor...Xorxn对于 X X X在二进制下的最高位 k k k,必然至少有一个 x i x_i xi这一位是1(反证法)。把 x i x_i xi减小的过程可以看作先去掉 x i x_i xi再加入一个 x n e w x_{new} xnew,即原式变为 X    X o r    x i    X o r    x n e w = x 1    X o r    x 2    X o r    . . .    X o r    ( x i    X o r    x i )    X o r    x n e w    X o r    . . .    X o r    x n X\;Xor\;x_i\;Xor\;x_{new}=x_1\;Xor\;x_2\;Xor\;...\;Xor\;(x_i\;Xor\;x_i)\;Xor\;x_{new}\;Xor\;...\;Xor\;x_n XXorxiXorxnew=x1Xorx2Xor...Xor(xiXorxi)XorxnewXor...Xorxn

因为要使 X    X o r    x i    X o r    x n e w = 0 X\;Xor\;x_i\;Xor\;x_{new}=0 XXorxiXorxnew=0 X    X o r    x i = x n e w X\;Xor\;x_i=x_{new} XXorxi=xnew x n e w x_{new} xnew在二进制下高于 k k k的位上和 x i x_i xi相等,在第 k k k位上 x i x_i xi是1而 x n e w x_{new} xnew是0,所以 x n e w < x i x_{new}<x_i xnew<xi,取法可行。

由上可知,先手假如处在状态2,那么他只要每次都把状态2变成状态1,就可以必胜。反之,要是先手处在状态1,那他的对手每次也都可以经过操作再次让他处在状态1,所以必败。

anti-Nim

模型

操作和Nim游戏一样,唯一不同的地方是无法操作的人赢。

结论

先手必胜,当且仅当:

  1. 所有堆的石子数都为1,并且每堆的石子数异或和为0(偶数堆)
  2. 至少有1堆的石子数大于1,并且每堆的石子数异或和大于0。

证明

对于第一种情形,显然,每次一个人只能取掉一堆,那么堆数为偶数时对手就是取最后一颗石子的人,先手就赢了。

对于第二种,分为两种情况:

第一种,只有一堆石子数大于1,此时异或和必然大于0。考虑对这堆数量大于1的石子操作。假如剩下的只有1个的堆有奇数个,先手就取完这堆,剩下奇数个只有一堆的石子,留给对手的就是必败态了。假如剩下的只有1个的堆有偶数个,先手就把数量大于1的那堆取到只剩一个,留给对手的同样是必败态。所以这种状态必胜。

第二种,有至少两堆的石子数大于1。

设此时异或和为0的状态为“状态1”,大于0为“状态2”。

对于状态2,根据Nim游戏的证明,我们必然有一种取法使得取完之后异或和为0。然后稍微证明一下这样取只可能将状态2转移到状态1而不可能是其他情况:因为最多只能取完一堆,所以剩余的石子数大于1的堆至少有1堆,并且又因为只有1堆石子数量大于1的时候(即第一种情况)异或和为不可能为0,所以用这种方法取我们一定可以把状态2转换为状态1。

对于状态1,不管如何取,异或和必然大于0,所以留给对手的状态必然是状态2或者只有一堆石子数量大于1的状态。因为只有一堆石子数量大于1是对手的必胜态,而假如转移到状态2的话对手还可以将状态变回状态1,所以处在状态1的人必将留给对手只有1堆石子数大于1的情况。所以状态1是必败态。从而,状态2是必胜态。

证毕。

运用

任何一种游戏可以将状态看做点,转移看做边,而整个游戏就是一张图。一个状态的 S G SG SG函数是他的出边连向的所有状态的 S G SG SG值组成的集合的 m e x mex mex。感性理解就是一个状态的 S G ( u ) SG(u) SG(u)值为 x x x,那么他能经过一步转移达到一个 S G ( v ) ∈ [ 0 , x − 1 ] SG(v)\in[0,x-1] SG(v)[0,x1]

那么我们就能利用Nim游戏或者anti-Nim游戏的结论合并多个并列的游戏了。因为一个游戏的初始状态 S G SG SG值为 x x x,相当于一个石子数量为 x x x的堆。

正因为其与 S G SG SG函数的结合,所以Nim和anti-Nim的应用非常广泛。

后记

在此收藏一位大佬的博客,写的非常全面,还有其他各种博弈。clover_hxy

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值