博弈论之SG函数

本文介绍了博弈论中的SG函数,包括NIM博弈、公平组合游戏ICG、有向图游戏及Mex运算。SG函数在有向图游戏中用于判断游戏局面的胜负,通过 mex 运算结合子游戏的SG函数值来确定。定理表明,有向图游戏的SG函数值大于0表示必胜,等于0则为必败。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

博弈论之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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值