博弈之SG函数

前几天在网上学习了一下SG函数,稍微了解了大概,觉得自己动手理一下可以加深印象。

SG函数的使用似乎都和Nim游戏有关。

首先理清几个概念:

  P点:必败点,处于此位置时,在双方采取最佳策略时必败。

  N点:必胜点,处于此位置时,在双发采取最佳策略时必胜。

P点与N点的性质

  1.所有终结点都是必败点。(比如取石子时面对三堆石子的状态是(0,0,0),则无法取物,败。而(0,0,0)为终结点,由此可得此性质。)

  2.从必胜点N可以一步到达必败点P;(所有能一步走到P的就是N点)

  3.P只能进入N点。(通过一步只能到达N的是P点。)

通常分析必胜点和必败点都是以终结点逆序分析的。

下面介绍SG定理和SG函数:

SG定理:

    各个游戏SG函数的Nim和 等于游戏和的SG函数(即如果当前状态由几个部分组成,则当前状态的SG等于这几个部分SG的异或值。和Nim游戏一样,如果每堆有x个石子,则这一堆的SG为x,N堆的SG为每堆SG的异或。)这样就可以将游戏划分为若干个子游戏,然后对每一个子游戏分而治之,从而简化问题。

    而Bouton定理(状态(x1,x2,x3)为必败状态,当且仅当x1^x2^x3=0,即Nim和为0)可以看做是SG定理在Nim游戏中的运用(练习:UVALive/LA 5059+UVA 10561+UVA 12293)。


SG函数

    首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示不属于该集合的最小非负整数。如:mex{0,1,2,4}=3,mex{2,3,6}=0,mex{}=0。

    对于任意状态x,定义SG(x)=mex(S),其中S是x后继状态的SG函数的集合。比如x有3个后继状态:SG(a)、SG(b)、SG(c),则SG(x)=mex{SG(a),SG(b),SG(c)}。若x为终态,则x的后继状态为空集,所以SG(x)=mex{}=0。即集合S的终态为空集,所以x为必败点P 当且仅当 SG函数的终态为SG(x)=0。

(因为x为必败点,所以当到达终态时,x的后继为空集,即在选择之前已经取光,无法进行任何选择,所以SG(x)=0)

(一个状态是必败态当且仅当它所有后继都是必胜态;一个状态是必胜态当且仅当至少有一个后继是必败态。)


来个网上的例子加深下对后继状态的了解。

【实例】取石子问题

有1堆n个石子,每次只能取{1,3,4}个,先取完者胜,则各个状态的SG值为多少?

首先知道当状态x=0时,无法选取石子,没有后继状态,所以SG[0]=mex{}=0,可以取的状态为f[]={1,3,4}。

当前有1个石子(即面对状态x=1),只能取走1个石子,所以剩余{0}个,SG[1]=mex{SG[0]}=mex{0}=1。(0即为1的后继状态。)

当前有2个石子(即面对状态x=2),只能取走1个石子,所以剩余{1}个,SG[2]=mex{SG[1]}=mex{1}=0。(1为2的后继状态。)

当前有3个石子(即面对状态x=3),可以取走1,3个石子,所以剩余{2,0}个,SG[3]=mex{SG[2],SG[0]}=mex{0,0}=1。

当前有4个石子(即面对状态x=4),可以取走1,3,4个石子,所以剩余{3,1,0}个,SG[4]=mex{SG[3],SG[1],SG[0]}=mex{1,1,0}=2;

当前有5个石子(即面对状态x=5),可以取走1,3,4个石子,所以剩余{4,2,1}个,SG[5]=mex{SG[4],SG[2],SG[1]}=mex{2,0,1}=3;

以此类推……

可以得到:

x012345678
SG[x]010123201
由上述实例可以得到SG函数求解步骤:

1.使用数组f将可改变当前状态的方式记录下来。(如上述中每次只能取{1,3,4}个石子,则f[]={1,3,4}。)

2.使用另一个数组标记当前状态x的后续状态。

3.最后模拟mex运算,即搜索未被标记的最小非负值,将其复制给SG[x]。

4.不断重复2-3步,至完成1-n的SG函数值。

网上还给了一道实战演练:hdu-1848。(链接

还有一些组合博弈的题目,先列下来,慢慢刷。

POJ 2234 Matches Game
HOJ 4388 Stone Game II

POJ 2975 Nim
HOJ 1367 A Stone Game
POJ 2505 A multiplication game
ZJU 3057 beans game
POJ 1067 取石子游戏
POJ 2484 A Funny Game
POJ 2425 A Chess Game
POJ 2960 S-Nim
POJ 1704 Georgia and Bob
POJ 1740 A New Stone Game
POJ 2068 Nim
POJ 3480 John
POJ 2348 Euclid's Game
HOJ 2645 WNim
POJ 3710 Christmas Game 
POJ 3533 Light Switching Game


主要参考博客:http://blog.csdn.net/luomingjun12315/article/details/45555495



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值