sg函数和nim游戏的关系

  本人萌新,文章如有错漏请多多指教~~

  我在前面发了关于nim游戏的内容,也就是说给n堆个数不同的石子,每次在某个堆中取任意个数石子,不能取了就输了。问你先手是否必胜。然后只要这n堆石子的石子数异或和等于0就必败,不等于0就必胜。这个是通过利他,利己两个态的定义和转换归纳证明的。可是nim游戏只是博弈论中的一个模型,还有其他模型怎么快速判断胜负呢?例如说这道题,它不是一个nim游戏。我们现在要把它转换成一个nim游戏。

  首先定义ICG,只有满足这种定义的博弈论模型才能转换成nim游戏。满足以下条件的游戏是ICG(可能不大严谨):

  1. 有两名选手
  2. 两名选手交替对游戏进行移动,每次一步,选手可以在有限的合法移动集合中任选一种进行移动
  3. 对于游戏的任何一种可能的局面,合法的移动集合只取决于这个局面本身,不取决于轮到哪名选手操作,以前的任何操作,骰子的点数或者其它什么因素。
  4. 如果轮到某名选手移动,且这个局面的合法的移动集合为空(也就是无法移动),则这名选手负。

  看上去是不是感觉好像没什么卵用(棋子只有一种颜色)。定义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堆石子。我们来一步步推导:

  1. 我们用sg值表示一个点的sg函数值,也用sg值表示某个棋子所在点的sg值。
  2. 首先来个引理,结点编号\(s\ge sg(x)\)。
  3. 如果当前局面,所有棋子sg值都是零,先手必输(回想一下nim博弈,如果石子都被取完了你就输了)。分类讨论:如果当前局面上的所有棋子都不能走了,显然它们的sg值都是零,那么先手必输。如果还有棋子能走,我们可以选一个棋子走一步,那么这个棋子的sg值就会变成非零。非零说明什么——说明当前棋子所在结点的孩子结点一定有一个sg函数值为零,那对手只要将棋走到那个结点就行了,局面还是所有棋子sg值都为0!
  4. 我们来讨论除了2的普通局面。普通局面,就相当于有棋子的sg值不为零。分类讨论:如果现在对手走,sg值异或和为零,他会选一个棋子,然后把这个棋子放到它的孩子结点上。sg值有可能增加,也有可能减少。只要sg值增加,你就把它还原回来(根据sg函数的定义!)。这个棋子的sg值总有不能增加的一天(因为第一条的那个引理)。所以说:增加某个棋子的sg值是毫无意义的,肯定能被还原。因此,我们干脆不考虑sg值增加的情况。所以,对手只能把某一个棋子的sg值减少。同时根据sg函数的定义,sg值可以变成比当前值小的任何值。

也就是说,如果我们有了一个ICG,那么我们把每个点的sg值求出来,变成一堆石子。那么判断ICG是否先手赢就是判断在这一堆石子上搞nim赢不赢。异或和即可。

sg函数和nim游戏的关系的更多相关文章

  1. 【UVA11859】Division Game(SG函数,Nim游戏)

    题意:给定一个n*m的矩阵,两个游戏者轮流操作. 每次可以选一行中的1个或多个大于1的整数,把它们中的每个数都变成它的某个真因子,不能操作的输. 问先手能否获胜 n,m<=50,2<=a[ ...

  2. 博弈论基础之sg函数与nim

    在算法竞赛中,博弈论题目往往是以icg.通俗的说就是两人交替操作,每步都各自合法,合法性与选手无关,只与游戏有关.往往我们需要求解在某一个游戏或几个游戏中的某个状态下,先手或后手谁会胜利的问题.就比如 ...

  3. Nowcoder 挑战赛23 B 游戏 ( NIM博弈、SG函数打表 )

    题目链接 题意 : 中文题.点链接 分析 : 前置技能是 SG 函数.NIM博弈变形 每次可取石子是约数的情况下.那么就要打出 SG 函数 才可以去通过异或操作判断一个局面的胜负 打 SG 函数的时候 ...

  4. 组合游戏 - SG函数和SG定理

    在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念:        P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败.        N点:必胜点 ...

  5. 【博弈论】浅谈泛Nim游戏

    Nim游戏在ACM中碰到了,就拎出来写写. 一般Nim游戏:有n堆石子,每堆石子有$a_i$个,每次可以取每堆石子中$[0,a_i-1]$,问先手是否有必胜策略. 泛Nim游戏:每堆石子有$a_i$个 ...

  6. 【基础操作】博弈论 / SG 函数详解

    博弈死我了……(话说哪个小学生会玩博弈论提到的这类弱智游戏,还取石子) 先推荐两个文章链接:浅谈算法——博弈论(从零开始的博弈论) 博弈论相关知识及其应用 This article was updat ...

  7. SG函数和SG定理【详解】

    在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念:        P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败.        N点:必胜点 ...

  8. SG函数&&SG定理

    必胜点和必败点的概念:        P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败.        N点:必胜点,处于此情况下,双方操作均正确的情况下必胜. 必胜点和必败点的 ...

  9. sg函数总结

    http://blog.csdn.net/luomingjun12315/article/details/45555495 这一段时间写的题和我接下来要展示的一些概念都来自这里↑. 必胜点和必败点的概 ...

随机推荐

  1. spring+mybatis的事务配置

    出自:http://kinglixing.blog.51cto.com/3421535/723870 定义一个实体类:Emp.java package com.lixing.scm.entity; p ...

  2. openlayers 3加载GeoServer发布的wfs类型服务

    转:https://blog.csdn.net/u013323965/article/details/52449502 问题产生:      openlayer3加载WFS存在跨域问题,需要用json ...

  3. Python Panda - 学习笔记

    #Group by Function df.groupby('Date')[['Date']].count() df.groupby('Date')[['Date']].sum() # if it c ...

  4. codeforces 680D D. Bear and Tower of Cubes(dfs+贪心)

    题目链接: D. Bear and Tower of Cubes time limit per test 2 seconds memory limit per test 256 megabytes i ...

  5. 基于v4l2 ffmpeg x264的视频远程监控(附上编译好的库文件)

    说明:主要是基于ghostyu网友整理的< arm mini2440 基于v4l2 ffmpeg x264的视频远程监控>.自己做了一遍,遇到不少问题,就整理记录下来. 1.平台 硬件:a ...

  6. ACM学习历程—HDU 3949 XOR(xor高斯消元)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 题目大意是给n个数,然后随便取几个数求xor和,求第k小的.(重复不计算) 首先想把所有xor的 ...

  7. ACM学习历程——ZOJ 3822 Domination (2014牡丹江区域赛 D题)(概率,数学递推)

    Description Edward is the headmaster of Marjar University. He is enthusiastic about chess and often ...

  8. margin百分比的相对值--宽度!

    假设一个块级包含容器,宽1000px,高600px,块级子元素定义 margin:10% 5%; 那么 margin的 top, right, bottom, left 计算值最终是多少px? 不是1 ...

  9. Python 中list, dictionary 与 file相互操作

    Python的list,dictionary可以写入file, 也可以从file中读取. 关于list: 1)写入文件         self.existedBlog.write("you ...

  10. UITextField常见用法

    //实例变量和全局变量的区别 //1.定义位置有区别:全局变量定义在方法的外部,实例变量写在接口文件或者延展中的大括号之内 //2.生命周期:全局变量生命周期和应用程序生命周期相同,实例变量的生命周期 ...