巴什博弈:
只有一堆N个石子,每次最多取M个最少取1个最后取光者胜
判断先手胜负的条件:
1.当N=M+1时,先手显然必败
2.当N=(M+1)*k+r 时,先手先取r个石子,若后手取x个石子,则先手再取(m+1-x)个石子,始终然后手面对N=(M+1)*k 个石子,如此重复后手必败
所以当N%(M+1)==0 时,后手胜,反之先手胜
例如N=7,M=3
先手取3个 7---->4 后手最多取3个,所以后手不论取多少,先手都可以在下一次获得胜利
例如N=8,M=3
无论先手取多少,后手总可使剩余的石子数为4,先手败
威佐夫博奕:
有两堆石子,两个人轮流从一堆或同时从两堆中取同样多的石子(从一堆中取时取多个,若从两堆中取多个则必须是取相同的个数),至少一个多者不限,最后取光者胜
方法一:
f(a,b) 表示两堆数量分别为a,b时的状态,则f(a,b)=f(a,b-k) or f(a-k,b) or f(a-k,b-k) 时间复杂度为O(n^3)
改进:
若为f(a,a) 则必胜(同时从两堆中取a个)
若为f(a,b)==f(b,a),两种状态相同
若f(a,b) 为必败态时对于任意的c!=b f(a,c)为必胜态,如(1,2)为必败态,先手无论怎么取,都可以使后手获得胜利,(1,n)则先手可以使后手面对(1,2)这种状态
所以,如果面对(0,0)这种状态是先手已经败了,我们把这种状态称为奇异形态
前几种奇异形态为(0,0),(1,2),(3,5),(4,7),(6,10) 有规律:1=2-1 2=5-3 3=7-4 4=10-6 设状态为(ak,bk)(0<=k<=n) ak是前面状态中没有出现的最小自然数,bk=ak+k
有个公式 ak=k*(sqrt(5)+1)/2 bk=ak+k 或者 bk=k*(sqrt(5)+3)/2
Nim 博弈:
有N堆石子,每堆有Pi个石子,从任意一堆中取走至少个石子,也可以整堆拿走,但不能从多堆中同时拿,无法取者为输(取走最后一个者胜)
举个例子:
假设有3堆石子,每堆分别为a=1,b=2,c=3,若你先拿怎么拿
1). 拿走第一堆的唯一一个石子,那么情况变成(0,2,3),在这种情况下对手只需要在第三堆中拿走一个石子,变成(0,2,2),你就输了,因为完后无论你怎么拿,对手只需要在另一堆中采取相同的策略,所以对手不会出现无法取火柴的情况
2).完全拿走第二堆变成(1,0,3)或者(1,2,0),这样做的方法跟1)是一样的,对手可以采取策略使两堆的石子数变成(1,0,1)或(1,1,0),败
3).对于(1,1,3),(1,2,2),(1,2,1),对手总可以使情况变成(1,1,0),(0,2,2),(1,0,1),败
所以(1,2,3)是一个先手必败的条件,简称必败态
1.对于必败态当且仅当其后继状态都是必胜态
2.对于必胜态当且仅当其后继至少有一个是必败态
3.没有后继的状态是必败态
Nim游戏的解法:
对于状态(a,b,c)当且仅当a or b or c == 0 时(a,b,c)为必败态,即每堆石子的数目全部放在一起求异或,当且仅当结果为0时状态是先手必败
1).对于必胜态,一定有一个后继状态是必败的
2).对于必败状态,其后继都是必胜态
关于Nim游戏的拓展:
一:
有N堆石子,其中第i堆有Pi个石子,每次每个人最多从某一堆中取M个石子,最后不能取得的人输
结论:若每堆石子数分别为p1,p2,p3,p4..... 对M+1取余得到r1,r2,r3,r4..... 然后 r1 or r2 or r3 or r4.... 若为0 则为必败态,反之必胜态
分析: 对每堆石子进行分解,得到两部分,每部分都还是N堆石子,第一部分是M+1的倍数,由Nim博弈知识得到这一部分是必败态,所以整个游戏的胜负可以由另一堆决定,即由余数决定为0则为必败态,反之必胜态
二:(NimK问题)
有N堆石子,每堆有Pi个石子,每次最多从K堆中取出若干石子,不能不取,最后不能取者输
结论:对于K>1 的情况,把p1,p2,p3,p4.....转成2进制,然后每位相加,最后结果%(M+1) 若为0则为必败态,反之必胜态
三:Misere Nim
规则同Nim游戏的规则相同,但是胜负条件发生变换,谁去走最后一个谁输(谁不能取谁赢)
结论:
1).若每堆都是只含有1个石子,且共有偶数堆,则先手胜
2).如果只有1堆石子的个数大于1,若总堆数为偶数,则先手把这堆的石子取完,若总堆数为奇数,则先手把这堆的数目取成1,使之成为有奇数堆只含有1个石子的石子堆(其中总起来说就是让先手面对 1) 这种状态)
3)如果至少有两堆的石子数大于1,考虑异或值,若为0,则必败,反之必胜