zoukankan      html  css  js  c++  java
  • 学习笔记--博弈组合-SG函数

    fye学姐的测试唯一的水题....
    

    SG函数是一种游戏图每个节点的评估函数
    具体定义为:
    这里写图片描述
    mex(minimal excludant)是定义在整数集合上的操作。它的自变量是任意整数集合,函数值是不属于该集合的最小自然数。
    即:mex{0,1,3,4}即为2;
    这里写图片描述
    所有的SG-组合游戏都存在相应的游戏图,我们完全可以根据游戏图的拓扑关系来逐一算出每一个状态点的SG函数(事实上我们只需要知道该状态点的SG函数值是否为0)。这样,我们就可以知道对于某一个状态,是先手必胜局还是先手必败局。

    直接给出SG函数的性质:
    (1)对于任意的局面,如果它的SG值为0,那么它的任何一个后继局面的SG值不为0;
    (2)对于任意的局面,如果它的SG值不为0,那么它一定有一个后继局面的SG值为0。

    事实上,每一个简单SG-组合游戏都可以完全等效成一堆数目为K的石子,其中K为该简单游戏的SG函数值。这样的等效是充要的。

    一发非常神的论文:http://wenku.baidu.com/link?url=S06e9oS3bZRpJ5hj6unGyLmifPATckvtJfTHTyBLU1VVyudiOzeACYB5dwV8A0nOAZxPnFoZak18PBjQKakyB_N6-1CZEnlE4OpHP0wDtO3

    具体的SG函数的实现:

    //f[]:可以取走的石子个数
    //sg[]:0~n的SG函数值
    //hash[]:mex{}
    int f[N],sg[N],hash[N];     
    void getSG(int n)
    {
        int i,j;
        memset(sg,0,sizeof(sg));
        for(i=1;i<=n;i++)
        {
            memset(hash,0,sizeof(hash));
            for(j=1;f[j]<=i;j++)
                hash[sg[i-f[j]]]=1;
            for(j=0;j<=n;j++)    //求mes{}中未出现的最小的非负整数
            {
                if(hash[j]==0)
                {
                    sg[i]=j;
                    break;
                }
            }
        }
    }

    DFS版:

    //注意 S数组要按从小到大排序 SG函数要初始化为-1 对于每个集合只需初始化1遍
    //n是集合s的大小 S[i]是定义的特殊取法规则的数组
    int s[110],sg[10010],n;
    int SG_dfs(int x)
    {
        int i;
        if(sg[x]!=-1)
            return sg[x];
        bool vis[110];
        memset(vis,0,sizeof(vis));
        for(i=0;i<n;i++)
        {
            if(x>=s[i])
            {
                SG_dfs(x-s[i]);
                vis[sg[x-s[i]]]=1;
            }
        }
        int e;
        for(i=0;;i++)
            if(!vis[i])
            {
                e=i;
                break;
            }
        return sg[x]=e;
    }
  • 相关阅读:
    js交互数据
    js字符串操作
    js数组操作
    hasattr ,setarrt, getattr属性
    装饰器
    redis数据库安装
    ubuntu中mysql数据库安装与删除
    装换器
    jinjia2
    Laravel框架与ThinkPHP框架的不同
  • 原文地址:https://www.cnblogs.com/DaD3zZ-Beyonder/p/5346179.html
Copyright © 2011-2022 走看看