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 这一段时间写的题和我接下来要展示的一些概念都来自这里↑. 必胜点和必败点的概 ...
随机推荐
- 【DP专辑】ACM动态规划总结(转)
http://blog.csdn.net/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强, ...
- MFC工程名称与所包含文件名称的关系(工程名可以更改,输出的.dll.exe.lib都以最后工程名命名为准)
创建MFC应用程序时,可以规定MFC程序的工程名称,假设初始为MFCApp,则此后该应用程序的资源文件名称,继承自CWinApp的那个类,包括.def文件,.odl文件等都会以MFCApp打头. 但是 ...
- 转载 解决Android与服务器交互大容量数据问题
对于目前的状况来说,移动终端的网络状况没有PC网络状况那么理想.在一个Android应用中,如果需要接收来自服务器的大容量数据,那么就不得不考虑客户的流量问题.本文根据笔者的一个项目实战经验出发,解决 ...
- BestCoder Round #93 比赛记录
机房又迎来了一次BC.大家都沸腾了... BC开场,大家全都瞬间开始 啪啦啪啦啪啦啪啦 都要赶紧水过第一题. 第一题明显直接贪心就好了,用map去重. 本人荣幸地第一个写完,提交 Wa. (崩溃的内心 ...
- bzoj 1441: Min 裴蜀定理
题目: 给出\(n\)个数\((A_1, ... ,A_n)\)现求一组整数序列\((X_1, ... X_n)\)使得\(S=A_1*X_1+ ...+ A_n*X_n > 0\),且\(S\ ...
- gulp之压缩图片
//先全局安装gulp:npm install -g gulp //然后在项目根目录中安装gulp依赖:npm install --save-dev gulp //http://www.gulpjs. ...
- CF1092 D & E —— 思路+单调栈,树的直径
题目:https://codeforces.com/contest/1092/problem/D1 https://codeforces.com/contest/1092/problem/D2 htt ...
- bzoj 4530 大融合 —— LCT维护子树信息
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4530 用LCT维护子树 size,就是实边和虚边分开维护: 看博客:https://blog ...
- Python之常用模块(二)
shelve xml处理 configparser hashlib logging shelve模块 shelve是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持 ...
- wpf dataGrid 选中行 失去焦点时 的背景颜色的更改
关于 wpf dataGrid 选中行 失去焦点时 的背景颜色的更改.很简单的方式,在datagrid的resource中更改InactiveSelectionHighlightBrushKey属性的 ...