[原博客] 组合游戏学习

阅读了《由感性认识到理性认识——透析一类搏弈游戏的解答过程》、《解析一类组合游戏》、《组合游戏略述——浅谈SG游戏的若干拓展及变形》这三篇论文,对组合游戏以及SG函数有了更深的理解。这篇文章摘下了这三篇论文的部分重要内容,以及部分我对组合游戏的理解。


一些名词与约定:

  • 游戏:这里的游戏指的并不是平时玩的那些游戏(Dota2啥的),而是只一些如Nim取石子之类的“益智”组合游戏。并且,我们关注的不是游戏好不好玩,而是游戏有没有必胜策略。下文详细介绍。
  • 状态:用一些数字来表示的游戏进行中的一个局面。
  • 必胜状态:存在一种走法走到一个必败状态。
  • 必败状态:后继状态都为必胜状态。

*特别的在组合游戏中一个状态不是必胜状态就是必败状态。

组合游戏是满足以下一些性质的游戏:

  1. 游戏只有两名参与者。
  2. 游戏过程中任意时刻有确定的状态。
  3. 规则规定了任意状态参与者可以到达的状态集合。
  4. 参与者轮流进行操作。
  5. 在游戏处于某状态,当前参与者不能进行操作时,游戏结束。此时按照规则决定胜负。
  6. 无论参与者做出怎样的操作游戏都可以在有限步数内结束(没有平局)。
  7. 信息对于两位参与者都是公平的透明的。

*我们还假设参与者都足够聪明,在有必胜策略时一定会走必胜策略。

几个游戏

游戏0:

有一堆石子,甲乙两人轮流取,不能不取,最多取完,当轮到一个人取不了时这个人输。
  这个游戏很显然,只要现在有石子,就可以都取完,然后第二次另一个人就没法取。
所以在这个游戏里{0}是必败状态,其他都是必胜状态。

游戏1:

有两堆石子,甲乙两人轮流取,每次只能从其中一堆取,不能不取,最多取完一堆,当轮到一个人取不了时这个人输。
  这个游戏相当于两个第一个游戏的“和”。我们可以很轻松的发现,如果两堆的石子个数一样的时候是先手必败的,因为不论先手怎样取石子,后手可以在另一堆中用相同的策略取,知道先手没有可以取的石子。而两堆石子个数不一样的时候是先手必胜的,先手可以拿较多的一堆使得两堆石子一样多。

游戏2:

甲乙两人面对若干堆石子,其中每一堆石子的数目可以任意确定,每一步应取走至少一枚石子,每一步只能从某一堆中取走部分或全部石子,如果谁无法按规则取子,谁就是输家。
  这个游戏看起来更复杂了,现在我们要引入一个有力的工具,叫做SG函数SG定理

SG函数

  • 一个游戏的终态x的SG(x)=0。
  • 其余状态x的SG(x)=min( n|n∈N且n!=SG(F(x)) )

其中F(x)为状态x能转移到的任意一个状态。
*第二个式子也写作 SG(x)=mex{SG(F(x))}
SG函数的性质:所有SG(x)==0的状态都是必败状态,所有SG(x)!=0的状态都是必胜状态。

SG定理:几个单个的组合游戏组成的游戏状态的SG值为每个单个游戏状态SG值的Xor和。
*证明见论文。
  然后对于游戏0有x个石子时SG(x)=x,所以求以下这些状态的Xor和就可以得到整个状态的SG值。

游戏3:

甲乙双方事先约定一个数m,并且每次取石子的数目不能超过m个,其余规则同游戏2。
  设只有一堆且m=3:
  SG(0)=0,SG(1)=1,SG(2)=2,SG(3)=3,SG(4)=0,SG(5)=1...
  所以SG(x)=x mod (m+1)。
  求一下整个状态的SG值就可以判断了。

游戏4:

甲乙两人面对若干排石子,其中每一排石子的数目可以任意确定。两人轮流取走一些石子,每一步必须从某一排中取走两枚石子,并且这两枚石子必须是紧紧挨着的,拿走后这一排就会断裂成两排。如果谁无法按规则取子,谁就是输家。(发挥想象力)
  这个题看起来不像前几道题那么裸了。但是与前几道题还是很像,也可以用SG解决。
  只是没有那么明显的规律了。需要从SG(0)=0,SG(1)=0,开始枚举可能转移的状态递推计算SG函数,程序实现可以记忆化搜索。



  组合游戏还有许多的问题,定理,这里只是最基础的入门,还需要深入学习啊。



  人们认识事物的过程中,开始只是看到了各个事物的现象。这就是认识的感性阶段。在这个阶段中,还不能作出合乎逻辑的结论。 随着研究的深入,这些感觉和印象的东西反复了多次,于是在人们的脑子里生起了一个认识过程中的突变,最后产生出合乎逻辑的结论。这就是认识的理性阶段。
  “由此及彼、由表及里、去粗取精、去伪存真” ,这才是由感性认识上升到理性认识的关键。(摘)
*本文缺少一些证明,若需了解详细,请参考原论文。

时间: 2024-10-25 11:24:14

[原博客] 组合游戏学习的相关文章

[原博客] BZOJ 2242 [SDOI2011] 计算器

题目链接 noip级数论模版题了吧.让求三个东西: 给定y,z,p,计算Y^Z Mod P 的值. 给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数. 给定y,z,p,计算满足Y^x ≡ Z ( mod P)的最小非负整数. 其中P均为素数.来分着处理. 1 y^z%p 快速幂.推荐一种又快又好写的写法. 1 LL power_mod(LL a,LL b,LL p){ //get a^b%p 2 LL ret=1; 3 while(b){ 4 if(b&1) ret = re

(背包)剪辑的别人写的背包文章,转到自己博客上供以后学习使用

背包问题——“完全背包”详解及实现(包含背包具体物品的求解) 分类: 背包问题2011-11-26 16:23 5820人阅读 评论(3) 收藏 举报 pathtable算法c优化delete -----Edit by ZhuSenlin HDU 完全背包是在N种物品中选取若干件(同一种物品可多次选取)放在空间为V的背包里,每种物品的体积为C1,C2,…,Cn,与之相对应的价值为W1,W2,…,Wn.求解怎么装物品可使背包里物品总价值最大. 动态规划(DP): 1) 子问题定义:F[i][j]表

[原博客] POJ 1067 取石子游戏

题目链接有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者.现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者.(中文题面,感动ing) 但是这道题实在是呵呵.开始没啥思路,根据必胜状态必败状态的定义,n^3打了个表,看起来是这样的. 图为100x100,已经缩小,左上角是状态(0,0),右下角状态为(10

关于写博客和目前学习总结

写博客 由于是第一次写,我就废话多点. 为什么开始写 本人是一个国内渣二本的一名大二学生,学的是软件工程专业,现在还没有分方向,不过我的目标目前是嵌入式系统与开发.之前一直听说过国内有很多技术大牛会写一些技术博客,自己也会时不时地找到他们的博客来浏览,每次都能学到很多东西.自己从来没有过关于写博客的想法,也从来都没有想过自己有一天也会来写博客.有一天刷bilibili的时候,就看到过一个程序员up主(用户名:codesheep)说过写技术博客对我们学生也是有用处的,后来也在网上搜索了些资料,最后

[原博客] HEOI2014 行记

HEOI: 河北省信息学竞赛省队选拔赛 又到了一年一度的HEOI呢. 我果然还是太弱了呢. (省选是在5月17.18日举行,日志是后补的..) Day0 报到日啊,省选今年在河北经贸大学举办,还算很便利的.于是下午翘了一节语文课,出校门打了辆车,就去了. 我跟那位司机说河北经贸大学,他说“是五七路那个么”,我说就那个红旗大街附近那个.然后就直奔五七路了.....走到一半左右,在手机GPS上发现自己已经偏离了方向,就跟司机说啊,于是发现走错了路,原路返回..(打车花了好多钱. )最后竟然按时到了报

加入博客园,学习,分享,交流

我只是一个大专的学生,高中没有好好努力学习,并且不愿意读2b,很多原因吧,选择学校的时候就选了3A的.但是一进去学习了一个星期我深深的感受到了大部分人都不是认真学习的.在宿舍的时候大多数都是(你懂得).我选择了软件技术的专业,转眼就是大一学生了,上学期学的东西貌似都只是些毛皮.我想好好学习IT技术,改变人们的生活,改变我的生活.在学校软件基地的一次组织HTML5的学习中,虽然我什么都没学到,因为没有基础,老师教的知识应该是大二学生应该听的,但是老师也教了许多软件的快捷键等等.并且给了我非常需要的

<转自原博客> 可爱的字符串算法们

在非常强又非常关心学弟学妹学习的企鹅学长变态的考纲下,我们无奈中选择一起学习新姿势 first:KMP算法 这是一个小迪更过博客的算法,我就不好意思在这里献丑了,所以献上友链一份:http://rabbithu.xyz/index.php?title=2017-04-01-01 second:Trie树(字典树) 嘤嘤嘤,这就是我在oi小组讲的第一堂课了!?(虽然当天大家都很颓,但是算法的简单是毋庸置疑的!) 在有关字符串的问题中,我们会遇到一些子串啊~前缀啊~的问题,如果正常枚举遍历的话复杂度

组合游戏学习笔记 [补档]

基础 满足以下条件的游戏是组合游戏: 有两人参与游戏, 轮流作出决策 无法作出决策的人失败, 然后游戏结束 游戏总能在有限次决策后结束 游戏的同一个状态不会多次到达 任意一个参与者在某一确定状态下可以作出的决策集合只与当前状态有关 定义先手必败状态为必败态, 先手必胜状态为必胜态, 则我们有 无法进行任何移动的状态是必败态. 可以移动到必败态的状态的是必胜态. 所有移动都只能得到必胜态的状态是必败态. 考虑如何判断一个游戏中, 先手是否必胜: 根据定义, 由于游戏中任意状态都不可能重复出现, 因

[原博客] POJ 2505 A multiplication game 组合游戏

题目链接题意: 有一个数p=1,甲乙两人轮流操作,每次可以把p乘2~9中的一个数,给定一个n,当一个人操作后p>=n,那么这个人赢,问先手是否必胜. 必胜状态:存在一种走法走到一个必败状态. 必败状态:后继状态都为必胜状态. 我们可以知道>=n的数都为必败状态,可以转移到>=n的最小的数为n/9(上取整),所以 n/9~n-1都为必胜态,同理n/9/2(都为上取整)为最小的必须转移到n/9~n-1(必胜状态)的状态,所以n/9/2~n/9-1为必败态,于是就可以这样推到1,看一下1是必胜