这里我们尽量避免给出抽象的公式,而是用简单直白的方式给出SG函数的定义。我们用x表示一个状态,用SG(x)表示一个状态的SG函数值。SG(x)定义为: 如果x是终止状态,那么SG(x)为0。 如果x不是终止状态,那么SG(x)为没有出现在x的后继状态的SG函数值中的最小非负整数。 第二条表述起来比较绕,我们仔细展开讲一...
SG函数是用于解决博弈论中公平组合游戏(ImpartialCombinatorialGames,ICG)问题的一种方法。 其中,公平组合游戏(ICG)满足以下性质: 有且仅有两名玩家。 两名玩家轮流决策,该决策会改变游戏当前局面,两人做的决策都是最优的。 当有一名玩家无法决策时,该玩家被视为失败,无论两位玩家如何操作,游戏必定会在有限次操作内...
#include <iostream>#include<algorithm>#include<cstring>#defineMAXN 10010//最大堆数#defineMAXM 110//最多有MAXM种不同个数的取石子方法usingnamespacestd;intf[MAXM];//f为可取石子数的集合intsg[MAXN];//sg[i]表示石子数为i时的sg函数值boolHash[MAXN];//标记一个数是否在mex{}集合中出现//打...
定义:sg函数是指双曲正弦函数,记作sinh(x),它的定义如下: sinh(x) = (e^x - e^(-x)) / 2 其中,e是自然对数的底数。 性质: 1.奇函数:sinh(-x) = -sinh(x) 2.增函数:当x1 < x2时,sinh(x1) < sinh(x2) 3.周期性:sinh(x)具有周期性,周期为π 此外,sg函数与其他常见函数如正弦函数、...
最近学习了nim博弈,但是始终无法理解sg函数为什么sg[S]=mex(sg[S'] | S->S'),看到一篇博文解释的不错,截取了需要的几章节。 四、Sprague-Grundy数的提出 五、状态组合时Sprague-Grundy数的运算规则 5.1 规则的发现 5.2 规则的证明 六、Sprague-Grundy定理的完整表述 ...
^g(Gn)。也就是说,游戏的和的SG函数值是它的所有子游戏的SG函数值的异或。 再考虑在本文一开头的一句话:任何一个ICG都可以抽象成一个有向图游戏。所以“SG函数”和“游戏的和”的概念就不是局限于有向图游戏。我们给每个ICG的每个position定义SG值,也可以定义n个ICG的和。所以说当我们面对由n个游戏组合成...
定义SG函数为SG(x)=mex{SG(y)|x→y}。 mex函数定义为不在集合中的最小自然数。 在只有1堆的Nim游戏中,SG(0)=0, SG(1)=mex{SG(0)}=1,SG(2)=mex{SG(0),SG(1)}=2 可以推出SG(n)=n 可以解释为如果下一个状态的SG值如果没有0,即下一状态对方必胜,则自己的SG值为0,自己必败。
count({x, y})) return mp[{x, y}]; set<int> st; //枚举所有后继状态,递归求得该状态SG函数的值 for(int i = 1; i < x; ++i) st.insert(sg(x - i, i)); for(int i = 1; i < y; ++i) st.insert(sg(i, y - i)); return mp[{x, y}] = mex(st); } void solve()...
sg函数,即select(选择)和gather(聚集)函数,是一种用于提取中括号中指定元素或合并多个中括号的函数。它可以根据特定的条件选择某些元素,或者将多个中括号中的元素聚集在一起,形成一个新的中括号。 二、sg函数的基本语法 在大多数编程语言中,sg函数的基本语法如下: sg([collection], [condition]) 其中,[collection...