acm专题学习之博弈(一)常见的博弈

一、巴什博弈(Bash Game)

情形:只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。

当n = m + 1, 我们假设第一个人拿走了k个, 还剩下 m + 1 - k。 因为1<=(m + 1 - k)<= m, 所以, 剩下的部分一定可以被第二个人一次性取走。

会发现:当n=(m+1)* r+s(r∈ N,s<= m),一定是先手必胜;那么先取者要拿走s个物品,如果后取者拿走k(k<= m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)*(r-1)个, 以后保持这样的取法,那么先取者肯定获胜。

与之对应的就是,当n=k*(m+1) 时候,先取者必输。

结论:n%(m+1)==0先手必输

二、尼姆博弈(Nimm Game)

情形:有3堆任意多的物品(x, y, z)。两个人轮流拿,每次只能从一堆中拿,至少拿一个,至多不限。拿到最后者胜利。

当(0,0,0)。先手肯定输。(0^0^0=0 )

当(0,n,n)。先手肯定输。因为无论先手怎么拿,后手都可以从另一堆里拿相同多个。最终转化成(0,0,0)的情况。(0^n^n=0 )

奇异局势(a,b,c)都有 a^b^c = 0( c-(a^b) =0)(奇异局势:无论谁面对奇异局势,都必然失败。)(证明可以参考下面的)

结论:a^b^c = 0为先手必败

扩展情形:Nim游戏

情形:初始时有若干堆石子,游戏双方轮流选定一堆并从中拿走任意颗石子(可以把一堆拿光,但不能不拿),拿走最后一颗石子者为胜。

P-position和N-position(P点和N点) :把Nim游戏的每个局势抽象为一副无向图,每个局势点必有P点(先手必败)和N点(先手必胜)。P点的P的意思是Previous,N点的Next的意思是Next。

P点和N点的特点:1 无法进行任何移动的点是P点(结束点) 2 N点可以一步到达P点(不必所有的移动都是P点) 3 P点无法一次到达P点(P点的所有移动都是N点)

Nim游戏的一个结论:对于一个Nim游戏的局面(a1,a2,...,an),它是P-position当且仅当a1^a2^...^an=0,其中^表示异或(xor)运算。(这里的a1,a2等是指每堆的个数)

根据这个结论来证明一下P点和N点的特点(对应上面的三个特点):

1 无法进行任何移动的时候,子局势都是石头数为0,所以子局面异或必为0

2 局面(a1,a2,...,an),若a1^a2^...^an!=0(该局面为N点),一定存在某个合法的移动,将ai改变成ai'后满足a1^a2^...^ai'^...^an=0(到达一个子局面为P点)。设a1^a2^...^an=k,则一定存在某个ai,它的二进制表示在k的最高位上是1(最高的1必定是存在着1^0的得到的)。这时最高位的1^1=0,所以ai^k<ai一定成立。可以的到子堆ai'=ai^k,此时a1^a2^...^ai'^...^an=a1^a2^...^an^k=0,得到的ai'的局面就是P点。

3 局面(a1,a2,...,an),若a1^a2^...^an=0,一定不存在某个合法的移动,将ai改变成ai'后满足a1^a2^...^ai'^...^an=0。要使a1^a2^...^an=a1^a2^...^ai'^...^an,只有0^0=0。那么ai'=ai^0,也就是ai'==ai,这样就不存在一个子堆ai',也不存在满足的子局面。

结论:先手必败当且仅当a1^a2^...^an=0

 三、威佐夫博奕(Wythoff Game)

情形:有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

找先手必输局势(奇异局势)的规律:(0,0) (1,2) (3,5) (4,7) (6,10) (8,13) (9,15) (11,18)(12,20)……

会发现a和b的差值是递增的,分别是0,1,2,3,4,5,6,7......n

会发现,每种奇异局势的第一个值总是等于当前局势的差值乘上1.618 ( a= (int)((b- a)*1.618 )

对于精度比较高的1.618 = (sqrt(5.0) + 1) / 2

结论:先手必输的a(a<b)总是等于当前局势的差值(b-a)乘上1.618

 

总结:之前队里训练的时候博弈论一道都没做出来过,为了补题来恶补了一下博弈论。新的学期就要开始了,不想再那么菜了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值