SG 函数
给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移动者判负。事实上,这个游戏可以认为是所有ImpartialCombinatorial Games的抽象模型。
其实,我们只要记住这个抽象的数学模型就好了,那些实际问题都可以转化为这个模型。
也就是说,任何一个ICG都可以通过把每个局面看成一个顶点,对每个局面和它的子局面连一条有向边来抽象成这个“有向图游戏”。下面我们就在有向无环图的顶点上定义Sprague-Grundy函数。首先定义mex(minimalexcludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。例如mex{0,1,2,4}=3、mex{1,3,5}=0、mex{}=0。
如果只考虑这种简单的博弈问题的话,显然 SG函数有点浪费,因为在这种只有一枚棋子的情况下,SG的值只需要有 0 和 1 就足够了,SG函数真正的威力在于多个棋子的情况下。
在多个棋子的情况下,一个状态是必胜状态的条件就是所有棋子的 SG值得异或为零,证明有点复杂就不证了。