复习csp2019的时候稍微看了看博弈论,发现自己对于sg函数的理解完全不到位

有些定义甚至想都没想过

于是就口胡了一篇blog来安慰虚弱的自己

Question 1

对于一个满足拓扑性质的公平组合游戏

若定义一个函数\(f\),\(f(P状态)=0\)

假设当前状态为\(a\),它对局面的定义合法

那么\(f=sg\)

可以发现,它就是\(Muti-sg\)问题的核心,接下来我们希望证明这个问题的正确性

首先,先弄清几个定义

对于后继

  1. 指的是一步转移到的状态
  2. 后继一定不会等于当前状态

对于局面

它满足以下的性质(当然,性质的名字是我自己取的)

  1. 状态性:它本身也可以是一个状态
  2. 后继性:局面本身是状态的后继,或是后继的后继,等等
  3. 异或可行性:即\(f(a)\)是\(a\)所包含的所有局面\(f\)值的异或和
  4. 唯一改变性:后继与状态本身仅改变了一个局面,当然事实并不是如此,如果你会k异或的话,但我们不做探究
  5. 单向变化性:局面只会改变成为它的后继(如果它是一个状态)

证明

\(f=sg\) 等价于任意\(a\)满足,\(f(a)\)是\(mex\{f(a的后继)\}\)

因为状态之间的关系本质上是一个\(DAG\)(即满足拓扑性),所以可以通过归纳法来证明

假设一个状态\(a\),它的所有后继(包括后继的后继)的\(f\)值都等于\(sg\)值

假设\(a\)可以分为局面\(b_1\)~\(b_n\),对应\(f_1\)~\(f_n\),它们等于\(sg_1\)~\(sg_n\)

所以\(f(a)=f_1\oplus f_2\oplus . ..\oplus f_n=sg_1\oplus sg_2\oplus . ..\oplus sg_n\)

如果\(a\)有一个后继\(c\),考虑\(f(c)=f(a)\oplus sg_i \oplus sg_x\),也就是把\(b_i\)这个局面改成了\(x\)局面

考虑\(f(c)\)可以取哪些值?

首先,因为\(sg_i \ne sg_x\),所以\(f(c) \ne f(a)\)

接下来证明\(f(c)\)可以取到\(0\)~\(f(a)-1\)的所有数

对于一个值\(val\in[0,f(a)-1]\)

设\(k\),满足\(val=f(a) \oplus k\)

因为\(val<f(a)\),考虑\(val\)的最高的和\(f(a)\)不同的一位,这一位必然存在并且在这一位上\(f(a)\)是\(1\),\(val\)是\(0\)

这一位同时也是\(k\)的最高位

那么必然存在一个\(sg_i\)满足它的这位是\(1\),而对应的\(sg_x\)必然会小于\(sg_i\),因为它的这位是\(0\)

所以存在满足条件的\(x\)且它是\(b_i\)的后继

所以这样的\(k\)可以通过\(sg_i \oplus sg_x\)构造得到

Question 2

翻硬币游戏

定义,有一些硬币排成一排,两人采用最优策略,每次可以翻动其中一些硬币(正变反,反变正),保证翻的硬币中最右边的硬币只能是从正翻到反,不能翻动者输

结论

每个状态的\(sg\)值等于当前所有为正面的硬币在序列中单独存在的状态的\(sg\)值的异或和

证明

设正面为\(1\),反面为\(0\)

'...'表示状态,...表示局面

把一个状态的\(01\)串倒过来,即'00101'变成\(10100\),把它看成一个二进制数,那么在游戏过程中这个数字递减

所以这个游戏是满足拓扑性质的

接下来我们设一个定义域为\(01\)串的函数\(f\)

  • \(f(00...0)=0\)
  • \(f(00...01)=sg(00...01)\)
  • \(f(一个01串)=\bigoplus_{每一个1} f(000..01)\)
  • 其中对于第\(i\)个\(1\),前面有\(i-1\)个\(0\)

假设当前状态为'011001'

\(f(011001)=f(01)\oplus f(001)\oplus f(000001)\)

'011001'有这样一个后继'010100'

可以说\(f(010100)=f(01)\oplus f(0001)=f(011001)\oplus f(0011)\oplus f(000001)\)

我们把\(01\),\(001\),\(000001\)看成是'011001'的三个特殊的局面

那么'010100'可以分拆成\(01\),\(001\),\(0011\)三个局面,尽管它们显得不那么特殊

这样的局面划分是合法的,因为可以看成是\(000001\)变成了\(0011\)这个局面,它满足异或和的性质

而很显然的是'0011''001100')确实是'000001'的一个后继

因为\(f\)满足这样的性质:

  1. \(状态f(P状态)=0\)
  2. 对于局面的定义合法

在此之前,我们已经证明了,对于这样的\(f\),\(f=sg\)

完结撒花★,°:.☆( ̄▽ ̄)/$:.°★


Blog来自PaperCloud,未经允许,请勿转载,TKS!

关于sg函数的一些证明的更多相关文章

  1. 博弈论(nim游戏,SG函数)

    说到自己,就是个笑话.思考问题从不清晰,sg函数的问题证明方法就在眼前可却要弃掉.不过自己理解的也并不透彻,做题也不太行.耳边时不时会想起alf的:"行不行!" 基本的小概念 这里 ...

  2. 【转】博弈—SG函数

    转自:http://chensmiles.blog.163.com/blog/static/12146399120104644141326/ http://blog.csdn.net/xiaofeng ...

  3. sg函数与博弈论

    这个标题是不是看起来很厉害呢... 我们首先来看一个最简单的游戏.比如我现在有一堆石子,有p个,每次可以取走若干个(不能不取),不能取的人就输了. 现在假设有两个人要玩这个游戏,一个人先手,一个人后手 ...

  4. SG函数 专题练习

    [hdu1536][poj2960]S-Nim 题意 题意就是给出一个数组h,为每次可以取石子的数目. 然后给你n堆石子每堆si.求解先手能不能赢? 分析 根据\(h\)数组预处理出\(sg[i]\) ...

  5. 【转】博弈问题及SG函数(真的很经典)

    博弈问题若你想仔细学习博弈论,我强烈推荐加利福尼亚大学的Thomas S. Ferguson教授精心撰写并免费提供的这份教材,它使我受益太多.(如果你的英文水平不足以阅读它,我只能说,恐怕你还没到需要 ...

  6. SG函数

    入门一: 首先来玩个游戏,引用杭电课件上的: (1) 玩家:2人:(2) 道具:23张扑克牌:(3) 规则:游戏双方轮流取牌:每人每次仅限于取1张.2张或3张牌:扑克牌取光,则游戏结束:最后取牌的一方 ...

  7. (转)博弈问题与SG函数

    博弈问题若你想仔细学习博弈论,我强烈推荐加利福尼亚大学的Thomas S. Ferguson教授精心撰写并免费提供的这份教材,它使我受益太多.(如果你的英文水平不足以阅读它,我只能说,恐怕你还没到需要 ...

  8. Nim 博弈和 sg 函数

    sg 函数 参考 通俗易懂 论文 几类经典的博弈问题 阶梯博弈: 只考虑奇数号楼梯Nim,若偶数楼梯只作容器,那么游戏变为Nim.题目 翻转硬币: 局面的SG值为局面中每个正面朝上的棋子单一存在时的S ...

  9. SG 函数 S-Nim

    http://poj.org/problem?id=2960 S-Nim Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 34 ...

随机推荐

  1. Intellij Idea 自动更新资源和类

    Run -> Edit Configurations 进入配置页 On update action:当发现更新时的操作   选择Update classes and resources  On ...

  2. Web应急:搜索引擎劫持

    当你直接打开网址访问网站,是正常的,可是当你在搜索引擎结果页中打开网站时,会跳转到一些其他网站,比如博彩,虚假广告,淘宝搜索页面等.是的,你可能了遇到搜索引擎劫持. 现象描述 从搜索引擎来的流量自动跳 ...

  3. Java学习:反射机制简介

    反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称为ja ...

  4. 深入V8引擎-AST(5)

    懒得发首页了,有时候因为贴的代码太多会被下,而且这东西本来也只是对自己学习的记录,阅读体验极差,所以就本地自娱自乐的写着吧! 由于是解析字符串,所以在开始之前介绍一下词法结构体中关于管理字符串类的属性 ...

  5. 深入V8引擎-写在前面

    这一篇不打算讲技术,聊点别的吧,写这个的原因主要是看到了我博客园的签名,开始这个最终源码系列前想说点什么. 转行前端(达成) 入行1年vue源码(达成).webpack源码(半达成) 入行2年争取读通 ...

  6. [转] Nginx配置性能优化

    大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了.而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能 ...

  7. STMP发送邮件(C#)

    记录一下使用SMTP协议发送邮件 public void Mail() { try { System.Net.Mail.SmtpClient client = new System.Net.Mail. ...

  8. net输出错误日志

    在使用net开发webapi的时候,有时候程序异常了,外面只能看到一个错误:an error occur 怎么才能将具体的 错误堆栈信息输出来呢? 1.在startup.cs文件中添加如下代码就可以将 ...

  9. 洛谷P1523 旅行商简化版(DP)

    题目: P1523 旅行商简化版 解析 可以看做是两个人同时从西往东走,经过不一样的点,走到最东头的方案数 设\(f[i][j]\)表示一个人走到i,一个人走到j的最短距离(\(i<j\)) 第 ...

  10. Vue.js项目实战-打造线上商城

    首先上一下完成后的效果: 首页: 商品详情页: 购物车页(其实还有个订单页,只是和购物车页基本类似,所以就不截图啦): 开始项目: 由于涉及的是前后端分离,所以我们的后台数据就模拟存储于浏览器端(co ...