博弈论之SG函数
一、NIM博弈&公平组合游戏ICG
1.Nim游戏
定义: 给定n堆物品,第i堆有A[i]个,两名玩家轮流行动,每次可以任选一堆取走任意多个物品。可以将一堆取光,但不允许不取。取走最后一个物品的人获胜。两人都采取最优策略,问先手能否获胜。
通常研究博弈论时仅考虑理想情况,即两人均无失误。NIM游戏不存在平局,即仅有先手必胜和先手必败 两种局面。
定理:NIM博弈先手必胜,当且仅当{A}的异或和不为0
证明:
记x为{A}的异或和
1.显然,所有物品都被取光是一个必败局面,此时{A}的异或和为0;此前的一个局面中x≠0,是一个必胜局面。
2.对于任意一个局面,如果{A}的异或和不为0,设x在二进制表示下最高位1出现在第k位,那么至少存在一堆石子,他的最高位1的位置在第k位。设这堆石子为A[i],那么显然A[i] xor x<A[i]。此时,我们将A[i]取到A[i] xor x,此时局面变为x=0。
3.若x==0,那么无论如何取石子,x都不会变为0,因为这一步操作相当于x xor A[i] xor A[i]-y]=0 xor (A[i] xor A[i]-y)。
4.显然,不断重复上述过程,总石子个数不断减小,并且局面可以在“x=0"与"x≠0”之间不断切换。由数学归纳法,异或和不为0为必胜局面。
证毕
P2197 【模板】nim 游戏(标签居然没有Nim游戏)
快读头文件比主函数长的模板……
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define re register
il int read()
{
int s=0,w=1;char c=getchar();
while(c<'0'||c>'9'){ if(c=='-') w=-1;c=getchar();}
while(c>='0'&&c<='9'){ s=(s<<1)+(s<<3)+c-'0';c=getchar();}
return s*w;
}
const int N=1e4+10;
int T,n,aa;
int main()
{
T=read();
while(T--){
n=read();
aa=0;
for(re int i=1;i<=n;i++) aa^=read();
if(aa) printf("Yes\n");
else printf("No\n");
}
}
2.公平组合游戏ICG
若一种游戏满足:
1.有两名玩家交替行动
2.在游戏进程的任意时刻,可以执行的合法行动与轮到哪名玩家无关
3.不能行动的玩家判负
则称该游戏是一个公平组合游戏。NIM属于公平组合游戏。
二、有向图游戏与Mex运算
1.有向图游戏
给定一张有向无环图,图中有一个唯一的起点,在起点上放有一枚棋子。两名玩家交替地把这枚棋子沿有向边移动,无法移动者判负。该游戏被称为有向图游戏
任何一个ICG都可以转化成有向图游戏。方法是,把每个局面看成一个点,将每一个合法行动看成一条有向边,由一个局面出发的有向边指向其可以到达的其他局面。
2.Mex运算
设S表示一个非负整数集合
定义: 求出不属于集合S的最小非负整数的运算,即为mex运算
三、SG函数
1.SG函数
定义: 在有向图游戏中,对于每一个节点x,设从x出发共有k条有向边,分别到达节点y1,y2,y3……yk,定义SG(x) 为x的后继节点y1,y2,……yk的SG函数值构成的集合再执行mex运算的结果,即:
SG(x)=mex({SG(y1),SG(y2)……SG(yk)})
特别地,整个有向图G的SG函数值被定义为有向图游戏起点s的SG函数值,即SG(G)=SG(s)
显然,对于一个出度为0的局面,其SG函数值为0
2.有向图游戏的和
设{G1,G2,……Gm}为m个有向图游戏,定义有向图游戏G,她的行动规则是:任选某一有向图游戏Gi,在Gi上移动一步。G被称为有向图游戏{G1,G2……Gm}的和。有向图游戏的和的SG函数等于它所包含的各个子游戏SG函数值的异或和,即:
SG(G) = SG(G1) xor SG(G2) xor ……xor SG(Gm)
这也就意味着,在求解某一个有向图游戏的SG函数值时,可以将该游戏分为若干个独立的“子游戏”,最后进行xor运算合并得到该游戏的SG函数值。
定理:
有向图游戏的某个局面必胜,当且仅当该局面对应的节点的SG函数>0
有向图游戏的某个局面必败,当且仅当该局面对应的节点的SG函数值等于0
可以这样理解:
1.对于一个没有出边的节点,他的SG函数值为0,对应着必败局面;其前一个局面为必胜局面。
2.类比Nim游戏,局面一定在“先手必胜”与“先手必败”之间不断切换,SG函数也不断进行着“值为0”“值不为0”的转换,运用数学归纳法,可知原命题成立。
对于“有向图游戏的和”,其也是一个特殊的有向图游戏,故也遵循上述定理。证明方法和Nim博弈类似。
例题:Cutting Game POJ 2311