zoukankan      html  css  js  c++  java
  • SG函数相关知识理解

    必胜点和必败点的概念:

           P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败。
           N点:必胜点,处于此情况下,双方操作均正确的情况下必胜。
    必胜点和必败点的性质:
            1、所有终结点是 必败点 P 。(我们以此为基本前提进行推理,换句话说,我们以此为假设)
            2、从任何必胜点N 操作,至少有一种方式可以进入必败点 P。
            3、无论如何操作,必败点P 都只能进入 必胜点 N。
     
    SG定理:游戏和的SG函数等于各个游戏SG函数的Nim和。
      首先定义mex运算,这是施加于一个集合的运算
      表示最小的不属于这个集合的非负整数。例如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时。
          
     
    F表示为当前的可改变当前状态 例如{1,3,4}三堆在Nim中的石头 用F[1] = 1 ,F[2] = 3, F[3] = 4表示
    SG表示当前的SG值 SG(x) = mex(S)
    S标记数组 在进行mex操作时进行数字标记
    int f[N],SG[maxn],S[maxn];
    void  getSG(int n)
    {
        int i,j;
        memset(SG,0,sizeof(SG));
        for(i = 1; i <= n; i++)
        {
            memset(S,0,sizeof(S));
            for(j = 0; f[j] <= i && j <= N; j++)
                S[SG[i-f[j]]] = 1;
            for(j = 0;; j++) if(!S[j])
            {
                    SG[i] = j;
                    break;
            }
        }
    }
  • 相关阅读:
    js模态框实现原理
    静态库、动态库------深入理解计算机系统
    链接器如何解析多重定义的全局符号(强弱符号)------深入理解计算机系统
    linux------深入理解linux内核
    libcurl坑
    《将博客搬至CSDN》
    openssl 编译
    vs2015+opencv3.3.1+ c++实现 静态背景下多运动目标提取,检测
    QT 相关书籍
    qml 知识积累
  • 原文地址:https://www.cnblogs.com/lightWh1te/p/13910541.html
Copyright © 2011-2022 走看看