浅谈公平组合游戏IGC
IGC简介
一个游戏满足以下条件时被叫做IGC游戏
(前面三个字是自己YY的,不必在意)
- 竞争性:两名玩家交替行动。
- 公平性:游戏进程的任意时刻,可以执行的操作和操作者本人无关。
- 唯一性:不能行动的玩家判负,不存在平局。
NIM游戏
内容
给定(n)堆石子,每堆有(a_i)个石头。规则是拿最后那块石头的人赢,(或者说没有石头拿的人输)。每次没人只能选择一堆石子并拿走,拿走多少不做限制,但是不能不拿。两人交替行动。问先手是否必胜。
定理
一个局面先手必胜,当且仅当((zeta(A)) 是我自己使用的记号,不是什么别的知识点)
证明如下:
考虑使用数学归纳法,当没有石头供选择时,此时显然有(zeta(A)=0),是必输的状态。
此时对于上一个局面,显然有(zeta(A') ot = 0),必要性得证。(不知道怎么表达我的意思)
下证对于每个(zeta(P) ot=0),一定存在一个合法操作使得(zeta(P' subset P)=0)
假设(zeta(P)=k),那么我们选择一个二进制最高位(1)和(k)的二进制最高位(1)在同一个位置上面的(a_i),我们可以得到(a_i ext{xor } k<a_i),那么也就是说我们可以把(a_i)拿到只剩下(a_i ext{xor }k)个石子,由于前面那个不等式,这个操作是合法的(石子变少了)。所以最后(zeta(P')=zeta(P) ext{xor }k=0)了。重复性得证。
Q.E.D
理解
证明应该已经够清楚了,乍一看感觉这个NIM博弈扩展性不是很强,貌似被局限在了整数和石子这种框架以内,我们好像很难对于其他的问题进行建模直接套在这个定理上面,但是:
- 一个局面可以被抽象成一个数
- 一个局面的后继局面可以取满([0,a))
那么我们建模即可。是不是很棒。
来道例题吧。
简要题解:在游戏正式开始前多了一个取很多堆的操作,取走很多堆可以看做对对手留一个NIM游戏的集合。那么要使得我们留下的集合的任意一个非空子集都(zeta(A) ot =0),那么就是要求我们留给对手的自己都是线性无关的,这样就不存在(zeta(A)=0)了,所以我们就取出尽量少的石子堆使得整个集合线性无关,显然可以贪心做吧...实际上叫拟阵,因为确实对于线性基的集合来说遗传性和增广性都挺容易满足的。(加入我取走这个大的石子堆可以防止和那个小一点的石子堆线性有关,那么我们不如取小的那一个,这是对这个拟阵的简单说明)。
有向图游戏
内容
有一个DAG,有一个唯一的起点,最开始棋子在这个起点上,你可以让棋子向该点任意一个出度走一步,当你走玩了最后可以走的那一步你就赢了(当你没有可以走的点你就输了)。两人交替行动。
定义1:mex运算
mex运算是对于正整数集合(S)的函数,具体计算方式为:
定义2:SG函数
递归定义:
在DAG上,设当前点为(x),设它的后继顶点集合为(V),那么
很明显当(V=varnothing)(没有后继节点了)的时候(S(x)=0)。
特别的,对于图(G),它的sg函数定义为这个图起点的sg函数值。
定理1:一个有向图游戏的胜负判断
一个有向图游戏局面必胜,当且仅当
证明如下
当我们发现棋子点上没有出边时候,我们输了,此时显然有(S(A)=0)。
那么我们上一个状态一定有(S(A') ge 1)。假如我们在这个(A')局面上我们就是必胜的。
也就是说,假如(S(A) ot=0)那么我们就可以把石子移动到那个(S(A')=0)的局面上,我们就必胜了。
定理2:多个有向图游戏的和
胜负判断和前面那个一样。
证明如下
每个(k=S(G_i))表示后继条件一定可以取到([0,k)),这和NIM游戏取石子有什么区别...那就是和NIM一样啊!
以上只能算说明,有一些其他的细节可以自己想通的。
理解
建模应该是OIER必备技能吧,我们可以把各种ICG游戏全部抽象成一个DAG上的游戏
咕咕咕
写得很好,可以看看,很全。
提供一大堆例题