浅谈公平组合游戏IGC
浅谈公平组合游戏IGC
IGC简介
一个游戏满足以下条件时被叫做IGC游戏
(前面三个字是自己YY的,不必在意)
- 竞争性:两名玩家交替行动。
- 公平性:游戏进程的任意时刻,可以执行的操作和操作者本人无关。
- 唯一性:不能行动的玩家判负,不存在平局。
NIM游戏
内容
给定\(n\)堆石子,每堆有\(a_i\)个石头。规则是拿最后那块石头的人赢,(或者说没有石头拿的人输)。每次没人只能选择一堆石子并拿走,拿走多少不做限制,但是不能不拿。两人交替行动。问先手是否必胜。
定理
一个局面先手必胜,当且仅当(\(\zeta(A)\) 是我自己使用的记号,不是什么别的知识点)
\[
\zeta(A)={XOR}_ia_i\not=0
\]
证明如下:
考虑使用数学归纳法,当没有石头供选择时,此时显然有\(\zeta(A)=0\),是必输的状态。
此时对于上一个局面,显然有\(\zeta(A')\not = 0\),必要性得证。(不知道怎么表达我的意思)
下证对于每个\(\zeta(P)\not=0\),一定存在一个合法操作使得\(\zeta(P' \subset P)=0\)
假设\(\zeta(P)=k\),那么我们选择一个二进制最高位\(1\)和\(k\)的二进制最高位\(1\)在同一个位置上面的\(a_i\),我们可以得到\(a_i \text{xor } k<a_i\),那么也就是说我们可以把\(a_i\)拿到只剩下\(a_i\text{xor }k\)个石子,由于前面那个不等式,这个操作是合法的(石子变少了)。所以最后\(\zeta(P')=\zeta(P)\text{xor }k=0\)了。重复性得证。
Q.E.D
理解
证明应该已经够清楚了,乍一看感觉这个NIM博弈扩展性不是很强,貌似被局限在了整数和石子这种框架以内,我们好像很难对于其他的问题进行建模直接套在这个定理上面,但是:
- 一个局面可以被抽象成一个数
- 一个局面的后继局面可以取满\([0,a)\)
那么我们建模即可。是不是很棒。
来道例题吧。
简要题解:在游戏正式开始前多了一个取很多堆的操作,取走很多堆可以看做对对手留一个NIM游戏的集合。那么要使得我们留下的集合的任意一个非空子集都\(\zeta(A)\not =0\),那么就是要求我们留给对手的自己都是线性无关的,这样就不存在\(\zeta(A)=0\)了,所以我们就取出尽量少的石子堆使得整个集合线性无关,显然可以贪心做吧...实际上叫拟阵,因为确实对于线性基的集合来说遗传性和增广性都挺容易满足的。(加入我取走这个大的石子堆可以防止和那个小一点的石子堆线性有关,那么我们不如取小的那一个,这是对这个拟阵的简单说明)。
有向图游戏
内容
有一个DAG,有一个唯一的起点,最开始棋子在这个起点上,你可以让棋子向该点任意一个出度走一步,当你走玩了最后可以走的那一步你就赢了(当你没有可以走的点你就输了)。两人交替行动。
定义1:mex运算
mex运算是对于正整数集合\(S\)的函数,具体计算方式为:
\[
\text{mex}(S)=min\{x|x\not \in S ,x \in \N\}
\]
定义2:SG函数
递归定义:
在DAG上,设当前点为\(x\),设它的后继顶点集合为\(V\),那么
\[
\S(x)=\text{mex}\{\S(k),k\in V\}
\]
很明显当\(V=\varnothing\)(没有后继节点了)的时候\(\S(x)=0\)。
特别的,对于图\(G\),它的sg函数定义为这个图起点的sg函数值。
定理1:一个有向图游戏的胜负判断
一个有向图游戏局面必胜,当且仅当
\[
\S(A)\not = 0
\]
证明如下
当我们发现棋子点上没有出边时候,我们输了,此时显然有\(\S(A)=0\)。
那么我们上一个状态一定有\(\S(A') \ge 1\)。假如我们在这个\(A'\)局面上我们就是必胜的。
也就是说,假如\(\S(A)\not=0\)那么我们就可以把石子移动到那个\(\S(A')=0\)的局面上,我们就必胜了。
定理2:多个有向图游戏的和
\[
\S(G)=\oplus_i\S(G_i)
\]
胜负判断和前面那个一样。
证明如下
每个\(k=\S(G_i)\)表示后继条件一定可以取到\([0,k)\),这和NIM游戏取石子有什么区别...那就是和NIM一样啊!
以上只能算说明,有一些其他的细节可以自己想通的。
理解
建模应该是OIER必备技能吧,我们可以把各种ICG游戏全部抽象成一个DAG上的游戏
咕咕咕
写得很好,可以看看,很全。
提供一大堆例题
浅谈公平组合游戏IGC的更多相关文章
- 浅谈设计模式--组合模式(Composite Pattern)
组合模式(Composite Pattern) 组合模式,有时候又叫部分-整体结构(part-whole hierarchy),使得用户对单个对象和对一组对象的使用具有一致性.简单来说,就是可以像使用 ...
- 【博弈论】浅谈泛Nim游戏
Nim游戏在ACM中碰到了,就拎出来写写. 一般Nim游戏:有n堆石子,每堆石子有$a_i$个,每次可以取每堆石子中$[0,a_i-1]$,问先手是否有必胜策略. 泛Nim游戏:每堆石子有$a_i$个 ...
- 今日文摘:浅谈 HTML5 的游戏化之路
如今商业网站中用于广泛的HTML5无限下拉效果已经越来越受到游戏网站的喜爱.各个品牌为了打造专属自己的游戏特色,纷纷推出了模拟HTML5效果的品牌 站,且都起到了相当好的效果.可是从很多方面来说我们对 ...
- 浅谈LZSS与游戏图片破解
业余游戏制作者最头疼的就是没有美工的支持了.很多业余游戏制作所使用的图片都是来自于网上的很有限的一些图片资源,然而这些图片并不能完整配套,所以业余游戏的画面往往显得单调或者搭配不协调(使用多个不属 ...
- 【博弈论】组合游戏及SG函数浅析
目录 预备知识 普通的Nim游戏 SG函数 预备知识 公平组合游戏(ICG) 若一个游戏满足: 由两名玩家交替行动: 游戏中任意时刻,合法操作集合只取决于这个局面本身: 若轮到某位选手时,若该选手无合 ...
- 【Unity游戏开发】浅谈Lua和C#中的闭包
一.前言 目前在Unity游戏开发中,比较流行的两种语言就是Lua和C#.通常的做法是:C#做些核心的功能和接口供Lua调用,Lua主要做些UI模块和一些业务逻辑.这样既能在保持一定的游戏运行效率的同 ...
- 【转载】浅谈游戏开发之2D手游工具
浅谈游戏开发之2D手游工具 来源:http://www.gameres.com/459713.html 游戏程序 平台类型: iOS Android 程序设计: 其它 编程语言: 引擎/SDK ...
- 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理
[微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...
- 【Unity游戏开发】浅谈 NGUI 中的 UIRoot、UIPanel、UICamera 组件
简介 马三最近换到了一家新的公司撸码,新的公司 UI 部分采用的是 NGUI 插件,而之前的公司用的一直是 Unity 自带的 UGUI,因此马三利用业余时间学习了一下 NGUI 插件的使用,并把知识 ...
随机推荐
- 【转】Linux 中清空或删除大文件内容的五种方法(truncate 命令清空文件)
原文: http://www.jb51.net/article/100462.htm truncate -s 0 access.log -------------------------------- ...
- div 事件透传
有些时候,我们会想要把一个 div 层覆盖在另一个 div 层上,要让下层的 div 响应鼠标事件而上层的不响应仅仅只做内容展示. 这种时候,我们就可以用到一个 CSS 属性:pointer-even ...
- 2.oracle分页,找到员工表中薪水大于本部门平均薪水的员工
ROWNUM的知识点 A ROWNUM依照oracle的默认机制生成. B rownum仅仅能使用<= <号,不能使用> >= rownum的实现机制 rownum表 ...
- Laravel利用pusher推送消息
一.注册pusher 1.注册https://pusher.com/ 2.获取key,密匙,app_id等 二.配置pusher 1.安装pusher composer require pusher/ ...
- BZOJ 4216 Pig 分块乱搞
题意:id=4216">链接 方法:分块以节约空间. 解析: 这题坑的地方就是他仅仅有3M的内存限制,假设我们开longlong前缀和是必死的. 所以考虑缩小这个long long数组 ...
- JQuery DataTables学习
1.Datatables简单介绍 DataTables是一个jQuery的表格插件.这是一个高度灵活的工具,根据的基础逐步增强,这将添加先进的互动控制.支持不论什么HTML表格. 主要特点: 自己主动 ...
- SVN 创建仓库操作
服务端安装完成后 1.创建一个存放仓库的文件夹(这里在home目录创建) #mkdir svnRepo #cd svnRepo/ 创建一个仓库 (写全路径) # svnadmin create /ro ...
- sgu101-欧拉回路
101. Domino time limit per test: 0.25 sec. memory limit per test: 4096 KB Dominoes – game played wi ...
- 高速上手Unity中最好的补间动画插件DFTween
出处:http://blog.csdn.net/u010019717 author:孙广东 时间:2015.3.17 23:00 DFTween 是一个在 Unity 游戏引擎中高 ...
- jar包解压与打包
首先感谢大神的指导:https://blog.csdn.net/mr_pang/article/details/47028921 1.首先准备一个能运行的jar文件,我们使用第三方解压工具进行解压wi ...