sg函数和nim游戏的关系
sg函数和nim游戏的关系
本人萌新,文章如有错漏请多多指教~~
我在前面发了关于nim游戏的内容,也就是说给n堆个数不同的石子,每次在某个堆中取任意个数石子,不能取了就输了。问你先手是否必胜。然后只要这n堆石子的石子数异或和等于0就必败,不等于0就必胜。这个是通过利他,利己两个态的定义和转换归纳证明的。可是nim游戏只是博弈论中的一个模型,还有其他模型怎么快速判断胜负呢?例如说这道题,它不是一个nim游戏。我们现在要把它转换成一个nim游戏。
首先定义ICG,只有满足这种定义的博弈论模型才能转换成nim游戏。满足以下条件的游戏是ICG(可能不大严谨):
- 有两名选手
- 两名选手交替对游戏进行移动,每次一步,选手可以在有限的合法移动集合中任选一种进行移动
- 对于游戏的任何一种可能的局面,合法的移动集合只取决于这个局面本身,不取决于轮到哪名选手操作,以前的任何操作,骰子的点数或者其它什么因素。
- 如果轮到某名选手移动,且这个局面的合法的移动集合为空(也就是无法移动),则这名选手负。
看上去是不是感觉好像没什么卵用(棋子只有一种颜色)。定义mex运算,这是一个施加于一个集合的运算,表示最小的,不属于这个集合的非负整数。例如mex{0, 1, 2, 4}=3,mex{2, 3, 5}=0,mex{}=0。对于一个给定的有向无环图,定义关于图的每个顶点的SG=Sprague-Garundy函数为:\(g(x)=mex\{g(y)\mid y是x的后继\}\)。
如果一个游戏是ICG。那么一种局面就相当于一个nim游戏,每个棋子对应1堆石子。我们来一步步推导:
- 我们用sg值表示一个点的sg函数值,也用sg值表示某个棋子所在点的sg值。
- 首先来个引理,结点编号\(s\ge sg(x)\)。
- 如果当前局面,所有棋子sg值都是零,先手必输(回想一下nim博弈,如果石子都被取完了你就输了)。分类讨论:如果当前局面上的所有棋子都不能走了,显然它们的sg值都是零,那么先手必输。如果还有棋子能走,我们可以选一个棋子走一步,那么这个棋子的sg值就会变成非零。非零说明什么——说明当前棋子所在结点的孩子结点一定有一个sg函数值为零,那对手只要将棋走到那个结点就行了,局面还是所有棋子sg值都为0!
- 我们来讨论除了2的普通局面。普通局面,就相当于有棋子的sg值不为零。分类讨论:如果现在对手走,sg值异或和为零,他会选一个棋子,然后把这个棋子放到它的孩子结点上。sg值有可能增加,也有可能减少。只要sg值增加,你就把它还原回来(根据sg函数的定义!)。这个棋子的sg值总有不能增加的一天(因为第一条的那个引理)。所以说:增加某个棋子的sg值是毫无意义的,肯定能被还原。因此,我们干脆不考虑sg值增加的情况。所以,对手只能把某一个棋子的sg值减少。同时根据sg函数的定义,sg值可以变成比当前值小的任何值。
也就是说,如果我们有了一个ICG,那么我们把每个点的sg值求出来,变成一堆石子。那么判断ICG是否先手赢就是判断在这一堆石子上搞nim赢不赢。异或和即可。
sg函数和nim游戏的关系的更多相关文章
- 【UVA11859】Division Game(SG函数,Nim游戏)
题意:给定一个n*m的矩阵,两个游戏者轮流操作. 每次可以选一行中的1个或多个大于1的整数,把它们中的每个数都变成它的某个真因子,不能操作的输. 问先手能否获胜 n,m<=50,2<=a[ ...
- 博弈论基础之sg函数与nim
在算法竞赛中,博弈论题目往往是以icg.通俗的说就是两人交替操作,每步都各自合法,合法性与选手无关,只与游戏有关.往往我们需要求解在某一个游戏或几个游戏中的某个状态下,先手或后手谁会胜利的问题.就比如 ...
- Nowcoder 挑战赛23 B 游戏 ( NIM博弈、SG函数打表 )
题目链接 题意 : 中文题.点链接 分析 : 前置技能是 SG 函数.NIM博弈变形 每次可取石子是约数的情况下.那么就要打出 SG 函数 才可以去通过异或操作判断一个局面的胜负 打 SG 函数的时候 ...
- 组合游戏 - SG函数和SG定理
在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点 ...
- 【博弈论】浅谈泛Nim游戏
Nim游戏在ACM中碰到了,就拎出来写写. 一般Nim游戏:有n堆石子,每堆石子有$a_i$个,每次可以取每堆石子中$[0,a_i-1]$,问先手是否有必胜策略. 泛Nim游戏:每堆石子有$a_i$个 ...
- 【基础操作】博弈论 / SG 函数详解
博弈死我了……(话说哪个小学生会玩博弈论提到的这类弱智游戏,还取石子) 先推荐两个文章链接:浅谈算法——博弈论(从零开始的博弈论) 博弈论相关知识及其应用 This article was updat ...
- SG函数和SG定理【详解】
在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点 ...
- SG函数&&SG定理
必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正确的情况下必胜. 必胜点和必败点的 ...
- sg函数总结
http://blog.csdn.net/luomingjun12315/article/details/45555495 这一段时间写的题和我接下来要展示的一些概念都来自这里↑. 必胜点和必败点的概 ...
随机推荐
- JS中的forEach、$.each、map方法推荐
下面小编就为大家带来一篇JS中的forEach.$.each.map方法推荐.小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 orEach是ECMA5中Array新方法中最 ...
- Maven发布项目丢失Mybatis Mapper包的映射问题
由于一些eclipse版本问题,mybatis的mapper包中的sql文件没有被打进包,需要在pom中加入: <build> <!--配置打包时不过滤非java文件开始 --> ...
- ACM学习历程—ZOJ3785 What day is that day?(数论)
Description It's Saturday today, what day is it after 11 + 22 + 33 + ... + NN days? Input There are ...
- bzoj 3653: 谈笑风生 可持久化线段树
题目大意 在一棵单位边权的有根树上支持询问: 给定a,k求满足下列条件的有序三元对的个数. a,b,c互不相同 a,b均为c的祖先 a,b树上距离<=k 题解 solution 1 首先我们知道 ...
- 洛谷【P1619】 解一元二次方程的烦恼
我对模拟的理解:https://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.luogu.org/problemnew/show/P16 ...
- NSSet 用法
//集合NSSet //集合也是储存对象,和字典一样也是无序存储 //集合中里面的元素不能重复 //集合里面的元素可以随机取出 //用数组放到集合中 NSArray *a10 = @[p1 , p2 ...
- Log4Net日志记录介绍
原文地址 : http://www.cnblogs.com/wolf-sun/p/3347373.html#3009010 简介 log4net库是Apache log4j框架在Microsoft . ...
- netty中的EventLoop和EventLoopGroup
Netty框架的主要线程就是I/O线程,线程模型设计的好坏,决定了系统的吞吐量.并发性和安全性等架构质量属性. 一.Netty的线程模型 在讨论Netty线程模型时候,一般首先会想到的是经典的Reac ...
- 三 volatile关键字
一:内存模型: 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入.由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问 ...
- linux日常管理-top动态查看负载
动态查看负载命令,具体哪个程序,哪个进程造成的系统负载. top 回车查看 3秒更新一次 第一行和uptime和w第一行显示的一样. CPU使用率,us sy 内存相关,Mem 一共多少,使用了多少, ...