SG函数与SG定理

抽象模型:给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移动者判负。
任何一个公平组合游戏(ICG)都可以通过把每个局面看成一个顶点,对每个局面和它的后继局面连一条有向边来抽象成这个模型
对于这个DAG,所有出度为0的点为P点(必败点),继而可以推出所有点是P还是N

sg的值的定义
(1)若当前局面x为终结局面(P点),则sg值为0
(2)若当前局面x非终结局面,其sg值为:sg(x) = mex{sg(y) | y是x的后继局面}
mex{a}表示集合a中未出现的最小非负整数

性质
若一个局面x,其sg(x)>0,则一定存在一个后续局面y,sg(y) = 0 (N一定可以到P)
若一个局面x,其sg(x)=0,则x的所有后续局面y,sg(y) > 0 (P只能到N)

sg定理:对于多个单一游戏,X = x[1..n],每一次我们只能改变其中一个单一游戏的局面。则其总局面的sg值等于这些单一游戏的sg值异或和。即:
sg(X) = sg(x[1]) ^ sg(x[2]) ^ … ^ sg(x[n])

若sg(X) = a > 0,意味着当前操作者可以通过改变x[1..n]中的一个值(一次操作)把sg(X)的值变为[0,a)之间的数,所以可以把sg(X)变成0使下一个操作者面对必败局面(sg(X) = 0,为P点)
可见,定义sg就是为了把复杂的情况简化,使其适用于最普通的Nim博弈模型(多堆取石子),而sg的值就是代表每一堆的石子数量,因为根据sg的定义,若sg(x) = a,对于任意一个0 <= b <= a,总存在x的后继局面y,使得sg(y) = b,而对于任意一堆石子,若当前石子数量为a,则下一次该堆石子的数量必定为[0,a)

posted @ 2020-03-26 18:04  Zeronera  阅读(298)  评论(0)    收藏  举报