1、问题模型:只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个,最后取光者得胜
2、解决思路:如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下(m+1)的倍数,就能最后获胜。
3、结论:n%(m+1)==0 先取者必败,即物品是由后取者取完的;n%(m+1)!=0先取者必胜,即先取者一定能将物品取完
二、威佐夫博奕
1、问题模型:有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜
2、解决思路:用(a[k],b[k])(a[k] ≤ b[k] ,k=0,1,2,…,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们
称为奇异局势。前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。
可以看出,a[0]=b[0]=0,a[k]是未在前面出现过的最小自然数,而 b[k]= a[k] + k,奇异局势有如下三条性质:
1)任何自然数都包含在一个且仅有一个奇异局势中(a[k]> a[k]-1 ,而 b[k]= a[k] + k > a[k-1] + k-1 = b[k-1] > a[k-1])
2)任意操作都可将奇异局势变为非奇异局势(若只改变奇异局势(a[k],b[k])的某一个分量,那么另一个分量不可能在其他奇异局势中;如果使(a[k],b[k])的两个分量同时减少,则由于其差不变,且不可能是其他奇异局势的差,因此也是非奇异局势)
3)采用适当的方法,可以将非奇异局势变为奇异局势。
假设面对的局势是(a,b),若 b = a,则同时从两堆中取走 a 个物体,就变为了奇异局势(0,0);
如果a = a[k] ,b > b[k],那么,取走b–b[k]个物体,即变为奇异局势;
如果 a = a[k],b < b[k] ,则同时从两堆中拿走 a-a[b-a]个物体;
如果a > a[k] ,b= a[k] + k,则从第一堆中拿走多余的数量a – a[k] 即可;
如果a < a[k],b= a[k] + k,分两种情况,第一种,a=a[j] (j < k),从第二堆里面拿走 b – b[j] ;第二种,a=b[j] (j < k),则从第二堆中拿走(b - a[j])即可
从如上性质可知,两个人如果都采用正确操作,那么面对非奇异局势,先拿者必胜;反之,则后拿者取胜。
3、结论:任给一个局势(a,b),用此公式判断是否为奇异局势a[k] =[k(1+√5)/2],b[k]= a[k] + k (k=0,1,2,…,n 方括号表示取整函数)
先求出j=[a(√5-1)/2],若a=[j(1+√5)/2],那么a = aj,bj = aj + j,若不等于,那么a = a[j+1],b[j+1] = a[j+1]+j+1,若都不是,那么就不是奇异局势。然后再按照上述法则进行,一定会遇到奇异局势。
三、Fibonacci博弈
1、问题模型:有一堆个数为n的石子,游戏双方轮流取石子,满足:
1)先手不能在第一次把所有的石子取完;
2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)
约定取走最后一个石子的人为赢家。
2、解决思路: 证明:根据“Zeckendorf定理”(齐肯多夫定理):任何正整数可以表示为若干个不连续的Fibonacci数之和。如n=83=55+21+5+2,我们看看这个分解有什么指导意义:假如先手取2颗,那么后手无法取5颗或更多,而5是一个Fibonacci数,那么一定是先手取走这5颗石子中的最后一颗,同理,接下去先手取走接下来的后21颗中的最后一颗,再取走后55颗中的最后一颗,那么先手赢。
反证:如果n是Fibonacci数,如n=89:记先手一开始所取的石子数为y
1)若y>=34颗(也就是89的向前两项),那么一定后手赢,因为89-34=55=34+21<2*34。
2)y<34时剩下的石子数x介于55到89之间,它一定不是一个Fibonacci数,把x分解成Fibonacci数:x=55+f[i]+…+f[j],如果f[j]<=2y,那么对B就是面临x局面的先手,所以根据之前的分析,后手只要先取f[j]个即可,以后再按之前的分析就可保证必胜。
3、结论:当n为Fibonacci数时,先手必败。即存在先手的必败态为当且仅当石头个数为Fibonacci数。
四、尼姆博弈
1、问题模型:有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
2、解决思路:我们用(a,b,c)表示某种局势,首先(0,0,0)显然是奇异局势,无论谁面对奇异局势,都必然失败。第二种奇异局势是(0,n,n),只要与对手拿走一样多的物品,最后都将导致(0,0,0)。仔细分析一下,(1,2,3)也是奇异局势,无论对手如何拿,接下来都可以变为(0,n,n)的情形。计算机算法里面有一种叫做按位模2加,也叫做异或的运算,我们用符号(+)表示这种运算。这种运算和一般加法不同的一点是1+1=0,发现奇异状态的异或结果都为0
3、结论:用(a,b,c)表示某种局势,必败态的规律为:(a,b,c)是必败态等价于a^b^c=0(^表示异或运算)。
五、公平组合博弈
1、定义:
1)两人参与。
2)游戏局面的状态集合是有限。
3)对于同一个局面,两个游戏者的可操作集合完全相同。
4)游戏者轮流进行游戏。
5)当无法进行操作时游戏结束,此时不能进行操作的一方算输。
6)无论游戏如何进行,总可以在有限步数之内结束。
2、模型:给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移动者判负。事实上,这个游戏可以认为是所有公平组合游戏的抽象模型。其实,任何一个ICG都可以通过把每个局势看成一个顶点,对每个局势和它的子局势连一条有向边来抽象成这个“有向图游戏”。
3、解决思路:两个P-状态的和总是P-状态,P-状态和N-状态的和总是N-状态。但是两个N-状态的和既可能是P-状态也可能是N-状态。因此,只知道单个游戏的P-状态和N-状态是不够的。
4、Sprague-Grudy定理:
令N = {0, 1, 2, 3, ...} 为自然数的集合。Sprague-Grundy 函数给游戏中的每个状态分配了一个自然数。结点v的Grundy值等于没有在v的后继的Grundy值中出现的最小自然数.
形式上:给定一个有限子集 S属于N,令mex S(最小排斥值)为没有出现在S中的最小自然数。定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。例如mex{0,1,2,4}=3、mex{2,3,5}=0、mex{}=0。
对于一个给定的有向无环图,定义关于图的每个顶点的Sprague-Garundy函数g如下:g(x)=mex{ g(y) | y是x的后继 }。
5、性质:
1)所有的终结点所对应的顶点,其SG值为0,因为它的后继集合是空集——所有终结点是必败点(P点)。
2)对于一个g(x)=0的顶点x,它的所有后继y都满足g(y)!=0——无论如何操作,从必败点(P点)都只能进入必胜点(N点)//对手走完又只能把N留给我们。
3)对于一个g(x)!=0的顶点,必定存在一个后继点y满足g(y)=0——从任何必胜点(N点)操作,至少有一种方法可以进入必败点(P点)//就是那种我们要走的方法。
6、应用:
1)可选步数为1-m的连续整数,直接取模即可,SG(x) = x % (m+1);
2)可选步数为任意步,SG(x) = x;
3)可选步数为一系列不连续的数,用mex(计算每个节点的值)