SG定理与SG函数
一个蒟蒻来口胡$SG$函数与$SG$定理。
要是发现有不对之处望指教。
首先我们来了解一下$Nim$游戏。
$Nim$游戏是公平组合游戏的一种,意思是当前可行操作仅依赖于当前局势。
而经典$Nim$游戏是指,一个地方放了$n$堆棋子,每堆棋子数目$a_i$给定。
两人轮流操作,每次操作从一堆中拿出任意数量的棋子。即最少拿一个,最多拿完。
拿完棋子的人胜。
如果两人都执行最优决策的话,胜负在刚开局时就已经确定了。
而在最有决策下,$Nim$游戏的胜负计算方式是:
若每堆棋子数量a_1^a_2^a_3^……^a_n=0则先手负,反之先手胜。
好像很玄学,怎么证明?
假设开局时a_1^a_2^a_3^……^a_n=0,
先手取走其中一堆的一些棋子,假设在$a_1$中去,那么式子变为a_1^a_2^a_3^……^a_n=k且$k!=0$。
此时一定存在一个$a_i$,满足二进制下$a_i$在$k$的最高位为$1$。
此时只要将$a_i$变为a_i ^ k,那么这$n$个数的异或和依然为$0$。
比如,原来集合中有{2,4,6},满足2^4^6=0;
先手拿走了6的一整堆,此时2^4^0=6;
而4与6满足性质,此时只需要让4变为4^6=2即可。
先手后手一直在拿走棋子,使得总数一直在减小,减小到的终点即0^0^0^……^0=0。
就一定是后手胜啦。
后来出题人们搞出了好多类似$Nim$游戏的博弈问题,而归根结底处理方法依然可以用异或法。
这就又衍生出了$SG$函数和$SG$定理。
先定义一下$mex$运算。
$mex$指对于一个非负整数集合不在其中的最小数。
举个例子,mex{}=0,mex{0,1,2,3}=4,mex{1,2,3,4,5}=0。
回到$SG$函数。
对于一个局势,不同的操作会产生不同的后果,产生不同的新局势。
当前局势的$SG$函数值,等于所有后继局势的$SG$函数的$mex$值。
比如说,当$Nim$游戏中只有一堆棋子时,对于每个棋子数$SG$函数计算如下:
SG[0]=mex{}=0
SG[1]=mex{0}=1
SG[2]=mex{0,1}=2
SG[3]=mex{0,1,2}=3
等等。
有什么用呢?
一个局势是$P-position$(先手必败)当且仅当其$SG$函数值为$0$。
哇好厉害啊。
接下来上$SG$定理:
对于任意有限多个公平组合游戏的组合,其$SG$函数值等于所有子游戏$SG$函数值的异或和。
能不能理解为,第一个游戏有好几堆棋子,第二个游戏有好几堆棋子……
结果整个游戏就是好几堆棋子,其$SG$函数等于所有堆的$SG$函数的异或和。
大概
就这些了。
模板靠手速,博弈靠智商
(o_o)
SG定理与SG函数的更多相关文章
- 简单易懂的博弈论讲解(巴什博弈、尼姆博弈、威佐夫博弈、斐波那契博弈、SG定理)
博弈论入门: 巴什博弈: 两个顶尖聪明的人在玩游戏,有一堆$n$个石子,每次每个人能取$[1,m]$个石子,不能拿的人输,请问先手与后手谁必败? 我们分类讨论一下这个问题: 当$n\le m$时,这时 ...
- SG函数和SG定理【详解】
在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点 ...
- SG函数&&SG定理
必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正确的情况下必胜. 必胜点和必败点的 ...
- (转载)--SG函数和SG定理【详解】
在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点 ...
- 组合游戏 - SG函数和SG定理
在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点 ...
- SG函数和SG定理(Sprague_Grundy)
一.必胜点和必败点的概念 P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正确的情况下必胜. 必胜点和必败点的性质: ...
- HDU 1851 (巴什博奕 SG定理) A Simple Game
这是由n个巴什博奕的游戏合成的组合游戏. 对于一个有m个石子,每次至多取l个的巴什博奕,这个状态的SG函数值为m % (l + 1). 然后根据SG定理,合成游戏的SG函数就是各个子游戏SG函数值的异 ...
- HDU5795A Simple Nim SG定理
A Simple Nim Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- HDU5724 Chess(SG定理)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5724 Description Alice and Bob are playing a spe ...
随机推荐
- Codeforces - 559B - Equivalent Strings - 分治
http://codeforces.com/problemset/problem/559/B 这个题目,分治就好了,每次偶数层可以多一种判断方式,判断它的时间就是logn的(吧),注意奇数层并不是直接 ...
- csacademy Round #36(模拟+最坏情况)
传送门 题意 给出n种袜子,每种袜子个数a[i],两只相同种类袜子配成一对,询问至少拿出多少只袜子能确保配出k对袜子 分析 In order to find out the minimum numbe ...
- 纯JS阻止浏览器默认滚动事件,实现自定义滚动方法
首先该方法兼容IE7+以上浏览器,可以实现页面上下滚动,而且也可以实现页面左右滚动,每次滚动的距离为屏幕的大小,滚动为加速滚动 javaScript代码如下: //滚动实现方法,使用鼠标滚轮每次滚动浏 ...
- 如何修改hosts文件并生效
hosts文件位置C:\Windows\System32\drivers\etc(可以建立一个.bat 的文件把(start "" C:\Windows\System32\driv ...
- Hadoop Hive概念学习系列之HDFS、Hive、MySQL、Sqoop之间的数据导入导出(强烈建议去看)
Hive总结(七)Hive四种数据导入方式 (强烈建议去看) Hive几种数据导出方式 https://www.iteblog.com/archives/955 (强烈建议去看) 把MySQL里的数据 ...
- MYSQL性能调优与架构设计之select count(*)的思考
select count(*)的思考 原文:MYSQL性能调优与架构设计 举例: 这里我们就拿一个看上去很简单的功能来分析一下. 需求:一个论坛帖子总量的统计 附加要求:实时更新 在很多人看来,这 ...
- C语言-------指针函数与函数指针的区别
一. 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某 ...
- java设计模式之单例设计模式
单例设计模式 保证一个类在使用过程中,只有一个实例.优势就是他的作用,这个类永远只有一个实例. 优势:这个类永远只有一个实例,占用内存少,有利于Java垃圾回收. 单例设计模式关键点 私有的构造方法. ...
- (办公)定时任务quartz入门
1.简单入门. 2.定时任务注入service. 入门案例: 1.1. 加jar <dependency> <groupId>org.quartz-scheduler</ ...
- [转]java注解与APT技术
下面是一个简单的自定义注解的栗子: package annotation; import java.lang.annotation.Documented; import java.lang.annot ...