【博弈论】SG函数应用总结

本文总结了博弈论中的SG函数概念及其在Nim堆游戏、巴什博弈和威佐夫博弈等游戏中的应用。通过理解SG函数的定义及计算方法,能够有效地解决各类博弈问题。

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

这两天用比较少的学习时间(真的,自己不能再懒了,马上要国赛了!!!)学习了博弈论,其中主要是对于SG函数的应用,是解题的关键。这里用自己的语言算是对SG做一个小结吧。

小结来源:这两天写的几篇博弈论博文


初识SG——Nim堆游戏:

尼姆堆游戏(两人轮流从任一堆里拿任意数量,最后没东西可拿者输)中神奇的结论:”若每一堆数量的异或和==0,则先手必输”让我觉得很奇妙,也不知道为什么会有这样的结论产生。但是在了解SG函数之后,原来NIM堆针对每一堆来说,因为根据“SG==0则先手必输”结合题意可知数量x==0则先手必输,所以每一堆的SG就是数量x。可以把每一堆看成一个子游戏,根据定理“总游戏SG=子游戏SG异或和”,得到之前说的神奇的结论。


观摩SG——巴什博弈和威佐夫博弈:

巴什博弈:只有一堆物品,数量为n,两人轮流从中取,一次最少取1个最多取m个,最后没东西可取者输。

SG=n%(m+1) 就一堆物品不需要异或和

威佐夫博弈:有两堆物品,两人轮流从中要么在一堆里取,要么在两堆里同时取相同数量,最少取1个,最后没东西可取者输。

这个是需要记公式

(a,b)成为奇异局势,即“先手必输”的局势。

令k=b-a (a,b是两堆物品数量,前提b>a,不然先交换),令参数wzf=(1+根号5)/2

a1=wzf*k ;  b1=wzf*wzf*k ;

看看是否a==a1&&b==b1,若是,则是奇异局势,先手必输。


了解SG——有向无环图 下棋游戏

根据SG函数的定义:SG(x)=mex{SG(y)| y为x的后续} ,这个后续很有意思,是需要题意来看,当前x按题意操作之后,能变成的数即为后续Y。所以,根据下棋游戏规则(这个点没有出度了就无路可走,输了),可以知道对于每个点来说,SG==出度。也符合SG==0先手必输。那么是不是觉得很像NIM堆游戏呢?ABSOLUTELY RIGHT!可以类比:每个点相当于每一堆,那么看看初始的时候棋都放在哪些点上,然后把这些点的SG值求异或和就得到总游戏的SG值了。总SG==0则先手必输。


应用SG方法

打表或递归 (见https://blog.youkuaiyun.com/m0_38033475/article/details/80272171)


灵活地用SG解题 

我觉得其实只要:记住SG==0先手必输,SG(x)=mex{SG(y)| y为x的后续} ,结合题意即可!

一般来说,如果这个游戏是可以拆分成子游戏的,那么我们就拆分,主要是先对子游戏进行分析(最后求异或和即可)。首先是要结合题意找到让SG==0的这种情况,由此知道SG可以由什么值代替或哪个值和哪个值呈什么关系的时候SG==0。然后再根据SG(x)=mex{SG(y)| y为x的后续} 来根据后续情况倒推之前情况的SG值!然后可以找找规律,用打表或者递归就把SG值求出来,最后求异或和就知道了。


比如说这道题(https://blog.youkuaiyun.com/m0_38033475/article/details/80281556),就是根据列写每个情况的SG值,找了一下规律就把题做出来了。注意这道题只有一个游戏(无法拆分),所以也没有求异或和的最后步骤,所以也不需要sg值数组或者返回sg值了,getsg函数返回值完全就可以只返回布尔值(sg==0则false)。

而蒜头君的新游戏这道题,也是列写每个情况的SG值,而其中的关键在于,你在找“后续操作”是要牢牢结合题意所给操作的!一般来说找到sg值==0的所有情况,就能根据性质求出所有情况的sg值啦!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值