博弈论小结Word文件下载.docx
- 文档编号:16714633
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:14
- 大小:19.59KB
博弈论小结Word文件下载.docx
《博弈论小结Word文件下载.docx》由会员分享,可在线阅读,更多相关《博弈论小结Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
使用(a1,a2,a3)来描述所处状态,ans=a1^a2^a3,如果ans为零则为P状态。
定理1:
Nim游戏的一个状态(x1,x2,x3)是P状态,当且仅当x1+x2+x3=0。
多与三个状态一样满足该定理
定理的证明自己网上找。
自己的理解:
Nim模型,为多种情况相同处理的并,而且处理只能是取走任意颗石子
四)Sprague-Grundy函数(简称SG函数):
有n堆石子,每次可以从第1堆石子里取1颗、2颗或3颗,可以从第2堆石子里取奇数颗,可以从第3堆及以后石子里取任意颗,最后取光着得胜。
首先来了解一下什么为SG函数,对于一个递增有界的图G(X,F)来说,SG函数g,是定义在X上的函数,函数值是非负整数,使得g(x)的值等于所有x的后继的SG函数中没有出现的最小非负整数。
对于递增有界的图,SG函数是唯一的、有界的。
所有的终止状态x,因为F(x)是空集,所以g(x)=0.
根据定义,考虑以下三点:
如果x是终止状态,那么g(x)=0。
一个状态x,如果g(x)≠0,那么一定存在一个x的后继y,使得g(y)=0。
一个状态x,如果g(x)=0,那么所有x的后继y,都有g(y)≠0。
这三句话表明,顶点x所代表的position是P-position当且仅当g(x)==0.
计算出所有情况的SG值,最后求异或g(G)=g(G1)^g(G2)^g(G3)........,当g(G)==0时为P状态。
定理2:
设G=G1+G2+…+Gn,Gi的SG函数是gi,i=1,2,…,n。
那么G的SG函数g(x1,x2,…,xn)=g1(x1)+g2(x2)+…+gn(xn),加法表示Nim和,即不进位的二进制加法。
SG模型,为多种情况不同处理的并,每次都需要求一次g函数,处理可以随便进行
5)补充:
阶梯博弈:
n个阶梯,阶梯上有一些石子,要求将阶梯上的石子都放到地上,操作只能是从第i个阶梯取若干个石子到第i-1上
对只需要对奇数号码的阶梯进行Nim运算即可。
先取者使状态到P状态,如果后面一个人也从奇数号码阶梯取石子,则按照Nim步骤操作即可,从奇数阶梯到偶数阶梯相当于取出石子扔掉。
若从偶数号码阶梯取石子,则先取者只需要将相同的石子从个该阶梯传到下面一个即可。
这里有详细介绍:
推荐几个博客:
这其实也是每类博弈题最先考虑的问题,或者突破点所在。
theory初步,对两个定理有详细的证明
下面是一些不错的题型:
hdoj1846,题型①
//AC,最简单的博弈题
#include<
cstdio>
intmain()
{
//freopen("
f:
//data.in"
"
r"
stdin);
intC,n,m;
scanf("
%d"
&
C);
while(C--)
{
scanf("
%d%d"
n,&
m);
if(n%(m+1))
printf("
first\n"
);
else
second\n"
}
return0;
}
poj1067,题型②
//取石子游戏---威佐夫博奕(WythoffGame)
cmath>
doublet=(1+sqrt(5.0))/2.0;
inta,b;
while(scanf("
%d%d"
a,&
b)==2)
if(a>
b)
{
inttemp=a;
a=b;
b=temp;
}
intk=b-a;
if(a==(int)(k*t))
0\n"
1\n"
hdoj1850,Nim模型
//Nim组合博弈问题
constintnMax=1000000+10;
intM,N[nMax];
M)&
&
M)
intcount=0,ans=0;
for(inti=0;
i<
M;
i++)
scanf("
N[i]);
ans^=N[i];
/*这里有个技巧,首先求出所有的异或值,如果想去除的话,只需要再次进行异或操作即可,因为x^x=0,执行两次等于没有执行。
原来每次都需要进行一次计算,这样可使算法效率从O(n*n)缩小到了O(n)*/
if((ans^N[i])<
N[i])
count++;
printf("
%d\n"
count);
hdoj1907,最后取走的为失败者
这里涉及到一些不同的东西。
直接写结论:
必败态中有一种情况需要单独判断,奇数个孤单堆(即奇数个堆石子数为1)为必败态。
还有一点是,两人在后面取石子的方式会有所不同,需要注意,详细解释在
//这个问题关键在最后取走的为失败者。
constintnMax=4747+10;
intT,N,A[nMax];
T);
while(T--)
N);
intans=0;
intsum=0;
N;
A[i]);
ans^=A[i];
sum+=A[i];
if(sum==N)
%s\n"
sum%2?
"
Brother"
:
John"
if(ans)
printf("
John\n"
else
Brother\n"
pdoj1847,简单SG问题,两种解法,第二种更普及一些:
//第一种解法,历编自己找到规律
intn;
n)!
=EOF)
if(n%3==0)
Cici\n"
Kiki\n"
//第二种解法
cstring>
constintnMax=1000+10;
inta[10];
intg[nMax];
voidinit()
for(inti=0;
10;
a[i]=1<
<
i;
memset(g,-1,sizeof(g));
g[0]=0;
intdfs(intn)
if(g[n]!
=-1)returng[n];
boolh[15];
//从①处可得知数组的大小
memset(h,0,sizeof(h));
inti;
for(i=0;
10&
n-a[i]>
=0;
h[dfs(n-a[i])]=1;
//①
h[i];
i++);
returng[n]=i;
intmain()
init();
n)==1)
if(dfs(n))
hdoj1536,再来一个SG函数问题加深一下印象
constintmMax=105,nMax=10005;
intk,m,n;
intS[mMax],H[mMax];
boolh[nMax][mMax];
//从②处可得知,二维数组的大小。
k;
S[i]);
=-1)
returng[n];
if(S[i]<
=n)//①因为S并不一定是从小到大排序好的,所以只能用if语句进行判断。
//纠错时,不要去找语法,语法不会有错,要去发现算法,哪一步出现了问题。
或许是某个细节没有注意。
h[n][dfs(n-S[i])]=1;
//②
h[n][i];
voidsolve()
while(m--)
n);
n;
H[i]);
ans^=dfs(H[i]);
if(ans)
W"
L"
printf("
\n"
for(;
;
)
k);
if(!
k)
break;
init();
solve();
hdoj1848,其实还是SG函数问题
constintnMax=17;
intF[nMax],N;
intg[1005];
F[1]=1;
F[2]=2;
for(i=3;
F[i-1]<
1000;
F[i]=F[i-1]+F[i-2];
N=i-1;
intf(intn)
boolh[nMax];
for(i=1;
=N&
F[i]<
=n;
h[f(n-F[i])]=1;
intm,n,p;
%d%d%d"
m,&
p);
if(m==0&
n==0&
p==0)
intans=f(m)^f(n)^f(p);
ans==0?
Nacci"
Fibo"
poj1704,阶梯博弈
/*
思路:
阶梯博弈
建模:
将两个棋子之间的位置数看做石子堆,棋子向左移动看做从左侧石子堆向右侧石子堆转移。
所以该题可转换成阶梯博弈模型进行求解。
*/
cstdlib>
constintnMax=1010;
intT,N,P[nMax];
intcmp(constvoid*a,constvoid*b)
int*pa=(int*)a;
int*pb=(int*)b;
return*pa-*pb;
P[0]=0;
for(inti=1;
=N;
P[i]);
qsort(P,N+1,sizeof(P[0]),cmp);
for(inti=N;
i>
=1;
i-=2)
ans^=P[i]-P[i-1]-1;
Bobwillwin"
Georgiawillwin"
hdoj1517,寻找失败类自己找出规律来
寻找失败类
这道题是自己做出来的好兴奋啊,原来WA,
通过测试特殊数据找出了程序细节处理上的错误
intop(longlongn)
if(n%18==0)
returnn/18;
else
returnn/18+1;
longlongn;
//使用double类型也可通过
%lld"
/*if(n==1)
Stanwins.\n"
continue;
while(n>
18)n=op(n);
if(n>
1&
n<
=9)
Olliewins.\n"
//或者
//因为这里在n=18时候会停止循环,边界处理没有明确,1<
=n<
=18;
if(n<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 博弈论 小结