SG函数详解
来源:互联网 发布:sql注入例题分析 编辑:程序博客网 时间:2024/06/08 01:38
许多部分资料摘自百度百科
定义
给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移动者判负。
定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。例如mex{0,1,2,4}=3、mex{1,3,5}=0、mex{}=0。
对于一个给定的有向无环图,定义关于图的每个顶点的Sprague-Grundy(SG)函数g如下:g(x)=mex{ g(y) | y是x的后继 }。
性质
①:没有出边的点(就是走不了的点)SG值为0。
②:对于一个g(x)=0的顶点x,它的所有前驱y都满足 g(y)!=0。
③:对于一个g(x)!=0的顶点,必定存在一个后继y满足g(y)=0。
(都挺显然的吧。。。)
先决条件
建议在看SG函数之前先学会Nim游戏,或者可以看看博主的Blog。
本质
SG函数本质就是Nim游戏。
让我们把一颗棋子推广到n颗棋子。
当g(x)=k时,表明对于任意一个0<=i
那么我们是否可以这么考虑:将n枚棋子所在的顶点的SG值看作n堆相应数量的石子,那么这个Nim游戏的每个必胜策略都对应于原来这n枚棋子的必胜策略。对于n个棋子,设它们对应的顶点的SG值分别为(a1,a2,…,an),再设局面(a1,a2,…,an)时的Nim游戏的一种必胜策略是把ai 变成k,那么原游戏的一种必胜策略就是把第i枚棋子移动到一个SG值为k的顶点。
证明和Nim很相似。
问题求解
既然SG函数和Nim是一样的,那么不难推出判断必胜策略的条件:
当游戏的SG异或和=0时先手必败,否则先手必胜。
然后就和Nim一样做啦!
- SG函数详解
- SG函数和SG定理【详解】
- SG详解
- sg函数
- SG函数
- SG函数
- SG函数
- SG函数
- SG函数
- SG函数
- SG函数
- SG函数
- SG函数
- sg函数
- SG函数
- SG函数
- SG函数
- sg函数
- Hopper + LLDB
- 学习IIC(I2C)原理
- BFPRT 算法(TOP-K 问题)
- Qt学习使用(2)
- android.content.ActivityNotFoundException MediaProjectionPermissionActivity
- SG函数详解
- python3 中字符串编码问题
- JAVAC 运行报错‘javac’不是内部或外部命令,也不是可运行的程序或批处理文件
- 史上最全的架构师图谱
- 【CodeForces
- CPU状态信息us,sy,ni,id,wa,hi,si,st含义
- “核弹”之父——黄仁勋
- angular实现内容追加
- 在linux上发布更新的项目