算法学习之博弈论(一)

巴什博弈:

只有一堆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,则必败,反之必胜

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值