sg函数总结

http://blog.csdn.net/luomingjun12315/article/details/45555495

这一段时间写的题和我接下来要展示的一些概念都来自这里↑。

必胜点和必败点的概念
       P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败。
       N点:必胜点,处于此情况下,双方操作均正确的情况下必胜。
 
必胜点和必败点的性质
        1、所有终结点是 必败点 P 。(我们以此为基本前提进行推理,换句话说,我们以此为假设)
        2、从任何必胜点N 操作,至少有一种方式可以进入必败点 P。
        3、无论如何操作,必败点P 都只能进入 必胜点 N。
 
Sprague-Grundy定理(SG定理): 
  游戏和的SG函数等于各个游戏SG函数的Nim和(异或和)。这样就可以将每一个子游戏分而治之,从而简化了问题。而Bouton定理就是Sprague-Grundy定理在Nim游戏中的直接应用,因为单堆的Nim游戏 SG函数满足 SG(x) = x。
 
SG函数
        首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。例如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函数的终态为 SG(x) = 0,当且仅当 x 为必败点P时。
 
 
 
我的理解:
试想一个博弈以不能操作为输,后手的保证胜利大多数基于对称方案,也就是说,对于先手的每一步,后手都有对应的步,异或同0异1刚好解决这个问题。
我对mex运算的理解是这是一种分层,各种取数方法博弈的dp停留在必胜必负这一层,如果多个类似的游戏综合起来就会有http://poj.org/problem?id=2425这棵树一样会有一些有很多分支的节点。sg函数的mex操作完成了节点的分层,然后再进行游戏的前后手操作匹配,异或和如果为0则表明后手对先手的每一步都能匹配,此时后手必胜。
 
其实我觉得这个理解并不是很重要,直接套板子也能写,但是我不知道原理就会浑身难受所以。。还是找了资料大概理解了一下原理。

原文地址:https://www.cnblogs.com/137shoebills/p/8087069.html