概述
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是异或运算。
证明
游戏中有这两种状态:
- 异或和为0
- 异或和大于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,并且每堆的石子数异或和为0(偶数堆)
- 至少有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,x−1]。
那么我们就能利用Nim游戏或者anti-Nim游戏的结论合并多个并列的游戏了。因为一个游戏的初始状态 S G SG SG值为 x x x,相当于一个石子数量为 x x x的堆。
正因为其与 S G SG SG函数的结合,所以Nim和anti-Nim的应用非常广泛。
后记
在此收藏一位大佬的博客,写的非常全面,还有其他各种博弈。clover_hxy