sg函数

石子游戏

题目描述:

  • 有n堆石子,每堆石子数量为$a_i$。两个人轮流从任意一堆石子中取若干个石子,最后无法取石子的人败。问,先手是否必胜。
  • 结论:
    当n堆石子xor和为0时,为必败局面。
  • 分析:
    首先,所有石子堆都没有石子时,xor和为0;然后考虑,若当前xor和为0,无论这个人怎么取,都不可能取完以后xor和还为0;而xor和不为零的,一定可以通过取特定数量的石子使xor和变为0;所以,xor和为0时先手必败,否则必胜。

sg函数

首先我们需要先了解一个运算mex,这是一个对于集合的运算,mex(S)表示集合S中最小没有出现过的自然数。例如:mex{0,1,2,4}=3,mex{2,3,5}=0,mex{}=0对于任意状态x,我们定义SG(X)=mex(S),其中S表示x的后继状态的SG函数值的集合。举个栗子:x有三个后继状态分别为SG(a),SG(b),SG(c);那么SG(x)=mex{SG(a),SG(b),SG(c)}。这样的集合S的最终状态必然是空集,所以当某一点的SG(x)=0,当且仅当x为为必败点时成立。

Sprague-Grundy定理(SG定理)

游戏的SG和等于各个游戏的SG函数的Nim和。这样就可以把一个游戏分而治之,从而简化问题。而Bouton定理就是SG定理在Nin游戏中的直接应用,因为单堆的Nim游戏SG函数满足SG(x)=x.即SG(G)=xor{SG(x)....};

posted @ 2020-10-13 17:35  Myong  阅读(68)  评论(0)    收藏  举报