SG 函数,博弈论

来源:互联网 发布:geogebra mac 编辑:程序博客网 时间:2024/05/24 05:18

讲博弈论,不得不说尼姆博奕,威佐夫博弈,巴什博奕,这是三种经典的博弈, 另外还有斐波那契数列型博弈,等等等。 问题有很多。

不管是取石子还是取石头还是打牌什么的,都可以归结于A,B,两个状态的博弈;

偶尔有简单的博弈, 偏数学规律的, 奇数 或者偶数 赢,质数赢,这样的也有,推推规律就能发现,这是简单的。

在这里我要说的是关于尼姆博弈引申出来的SG函数, 其实尼姆博弈是SG函数的特殊情况;

通常分析两个人。是分析两个人的状态, 是否在必败态上,如果在必败,那么就一定输了,

两种局势,必胜态和必败态。 我们知道从胜到败 有多种选择,(一着不慎,就输了)  而从必败到必胜却只有一条路。


尼姆博弈描述:有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

注意这里描述的是 可以取任意多的物品, 那就是从1-n 都可以取,(假设有n个物品);不可以不取。


而一般的题目,往往会限制,只能取1个,2个或者 4个  特定数目的 个数, 这时我们就必须用到SG函数了。


SG函数讲的是对于现在有x个物品 ,F{}集合表示我可以能取的石子的集合, (假如 一次只能取1,2,4 个石子。  F{}集合= F{1,2,4};) 表示最小的不属于这个集合的非负整数, mex(S) (S表示剩余石头SG函数的集合)

例如 SG[x]=mex(S)=mex(1,2,3,4)=0;

SG[y]=mex(S)=mex(0,1,2,4)=3;

这样定义: 对于任意状态 x定义 SG(x) = mex(S),其中 S x后继状态的SG函数值的集合。如 x有三个后继状态分别为 SG(a),SG(b),SG(c),那么SG(x) = mex{SG(a),SG(b),SG(c)} 这样集合S的终态必然是空集,所以SG函数的终态为 SG(x) = 0,当且仅当 x为必败点P时。

也就说SG【x】=0 必败态;


就拿取石子为例:

F=(1,3,4);n个石子

x=0,SG[0]=0;

x=1,剩下 1-F{1}=0; SG[1]=mex(SG[0])=1;

x=2 剩下2-F{1}={1,} SG[2]=mex(SG[1])= 0

x=3 剩下 3-F{1,3}={2,0} SG[3]=mex(SG[2],SG[0])==mex(0.0)=1;

x=4 剩下  4-F{1,3,4}={3,1,0}  SG[4]=mex(SG[3],SG[1],SG[0])= mex(1,1,0}=2

依次类推, x=5=SG[5]=3;

   x        0  1  2 3  4  5  6  7  8....

SG[x]    0 1  0  1  2  3  2  0  1....


知道SG 后 剩下的操作就是 求亦或了,  亦或到最后  !=0  先手胜  否则后手胜利;

SG函数求解 :

 SG值的计算方法  

1.可选步数为1~m的连续整数,直接取模即可,SG(x) = x % (m+1);

2.可选步数为任意步,SG(x) =x; (尼姆)

3.可选步数为一系列不连续的数,用模板计算。


模板:

int f[N],sg[N],S[N];       void getSG(int n)  {      int i,j;      memset(sg,0,sizeof(sg));      //sg[0]=0  必败态     for(i=1;i<=n;i++)      {          memset(S,0,sizeof(S));   // 重置         for(j=1;f[j]<=i&&j<=N;j++)              S[sg[i-f[j]]]=1;  //后继SG标记         for(j=0;j<=n;j++)   // 最小非0          {              if(!S[j])              {                  sg[i]=j;                  break;              }          }      }  }


这样遇到一般的博弈恐惧感就少了许多, 博弈 代码不多,难在推状态,  难的博弈,确实难推


参考博客:http://blog.csdn.net/strangedbly/article/details/51137432


题目链接:

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


123

原创粉丝点击