不常见的几种博弈
Ferguson博弈(清空/分割游戏)
清空/分割游戏也叫做Ferguson博弈。
进行游戏需要用到两个盒子。在游戏的开始,第一个盒子中有n枚石子,第二个盒子中有m个石子(n, m > 0)。参与游戏的两名玩家轮流执行这样的操作:清空一个盒子中的石子,然后从另一个盒子中拿若干石子到被清空的盒子中,使得最后两个盒子都不空,才轮到对方取。当两个盒子中都只有一枚石子时,游戏结束。最后成功执行操作的玩家获胜。
对于一个位置(x, y)来说,如果x, y中有一个偶数,那么(x, y)是N(必胜)位置。如果x和y都是奇数,那么(x, y)是P位置(必败)。可以用数学归纳法证明。
证明结论:(x,y)至少一偶时,先手胜;都为奇时,先手败
证明:
(x,y)=(1,1)时是先手必败态
下对max(x,y)>1进行归纳
1、当max(x,y)=2时,即(x,y)=(1,2)或(2,1)或(2,2),先手留下一个2分为(1,1),先手获胜
即当max(x,y)=2时结论成立。
2、假设max(x,y)<k时结论都成立,现证max(x,y)=k时结论成立
若(x,y)中有一个偶数(设为a),先手将另一个清空,把偶数a分为两个奇数b和c,由于b、c<a 小于等于 k,即max(b,c)<k,由假设,在(b,c)位置上后手作为新先手必败,故先手胜
若(x,y)都为奇数,先手只能保留一个奇数并将其分解为一奇a一偶b,由于max(a,b)<max(x,y)=k,由假设,在(a,b)位置上后手作为新先手必胜,故先手败
Fibonacci’s Game(斐波那契博弈)
斐波那契博弈模型,是ACM题中常见的组合游戏中的一种,大致上是这样的:
有一堆个数为 n 的石子,游戏双方轮流取石子,满足:
1. 先手不能在第一次把所有的石子取完;
2. 之后每次可以取的石子数介于 1 到对手刚取的石子数的 2 倍之间(包含 1 和对手刚取的石子数的 2 倍)。
约定取走最后一个石子的人为赢家,求必败态。
这个游戏叫做Fibonacci Nim,肯定和Fibonacci数列f[n]:1,2,3,5,8,13,21,34,55,89,… 有密切的关系。如果试验一番之后,可以猜测:先手胜当且仅当n不是Fibonacci数。换句话说,必败态构成Fibonacci数列。
下面简单谈谈“先手败当且仅当n为Fibonacci数列”这一结论是怎么得来的。
这里要用到一个很有用的定理:任何正整数可以表示为若干个不连续的 Fibonacci 数之和。
比如,我们要分解83,注意到83被夹在55和89之间,于是把83可以写成83=55+28;然后再想办法分解28,28被夹在21和34之间,于是28=21+7;依此类推 7=5+2,故83=55+21+5+2。
①如果 n 是 Fibonacci 数,比如 n = 89。89前面的两个Fibonacci 数是34和55。如果先手第一次取的石子不小于 34 颗,那么一定后手赢,因为 89 - 34 = 55 = 34 + 21 < 2*34,注意55是Fibonacci数。此时后手只要将剩下的全部取光即可,此时先手必败。故只需要考虑先手第一次取得石子数 < 34 即可,于是剩下的石子数 x 介于 55 到 89 之间,它一定不是一个 Fibonacci 数。于是我们把 x 分解成 Fibonacci 数:x = 55 + f[i] + … + f[j],其中55 > f[i] > … > f[j],如果 f[j] ≤ 先手一开始所取石子数 y 的两倍,那么对后手就是面临 x 局面的先手,所以根据之前的分析,后手只要先取 f[j] 个即可,以后再按之前的分析就可保证必胜。
下证:f[j] ≤ 2y
反证法:假设f[j]>2y,则 y < f[j]/2 = (f[j-1] + f[j-2])/2 < f[j-1]。而最初的石子数是个斐波那契数,即 n = f[k] = x + y < f[k-1] + f[i] + … + f[j] + f[j-1] ≤ f[k-1]+f[i]+f[i-1] ≤ f[k-1]+f[k-2] ≤ f[k] (注意第一个不等号是严格的),矛盾!f[j] ≤ 2y得证。
举例看:
有89个,随便让先手取2,那还剩87=55+32=55+21+2,那后手就取2;接下来肯定是拆21了······总之,按这个方法再一次让先手面对Fibonacci 数55,但此时先手也一定不能将55取完。总之都能让先手再次面对Fibonacci 数。
那为什么先手不能把55去玩呢?
因为55是需要分解的那个数能得到最大Fibonacci 数,就看89=55+34;因为每次都是先手先拆Fibonacci 数,而如果需要一次取完55,那后手就应先取到28,而再前一步,先手至少取14,但34<28+14;那么如果在细分的话,也是这个道理。或者第一次就取得大,第二次直接取完它,但仔细一想也是按前面说的规律来的 。
②如果 n 不是 Fibonacci 数,比如n=83,我们看看这个分解有什么指导意义:假如先手取2颗,那么后手无法取5颗或更多,而5是一个Fibonacci数,如果猜测正确的话,(面临这5颗的先手实际上是整个游戏的后手)那么一定是整个游戏的先手取走这5颗石子中的最后一颗,而这个我们可以通过第二类归纳法来绕过,同样的道理,根据“先手败当且仅当n为Fibonacci数列”,接下去先手取走接下来的后21颗中的最后一颗,再取走后55颗中的最后一颗,那么先手赢。
浙公网安备 33010602011771号