zoukankan      html  css  js  c++  java
  • SG定理与SG函数

    一个蒟蒻来口胡$SG$函数与$SG$定理。

    要是发现有不对之处望指教。

    首先我们来了解一下$Nim$游戏。

    $Nim$游戏是公平组合游戏的一种,意思是当前可行操作仅依赖于当前局势。

    而经典$Nim$游戏是指,一个地方放了$n$堆棋子,每堆棋子数目$a_i$给定。

    两人轮流操作,每次操作从一堆中拿出任意数量的棋子。即最少拿一个,最多拿完。

    拿完棋子的人胜。

    如果两人都执行最优决策的话,胜负在刚开局时就已经确定了。

    而在最有决策下,$Nim$游戏的胜负计算方式是:

    若每堆棋子数量a_1^a_2^a_3^……^a_n=0则先手负,反之先手胜。

    好像很玄学,怎么证明?

    假设开局时a_1^a_2^a_3^……^a_n=0,

    先手取走其中一堆的一些棋子,假设在$a_1$中去,那么式子变为a_1^a_2^a_3^……^a_n=k且$k!=0$。

    此时一定存在一个$a_i$,满足二进制下$a_i$在$k$的最高位为$1$。

    此时只要将$a_i$变为a_i ^ k,那么这$n$个数的异或和依然为$0$。

    比如,原来集合中有{2,4,6},满足2^4^6=0;

    先手拿走了6的一整堆,此时2^4^0=6;

    而4与6满足性质,此时只需要让4变为4^6=2即可。

    先手后手一直在拿走棋子,使得总数一直在减小,减小到的终点即0^0^0^……^0=0。

    就一定是后手胜啦。

    后来出题人们搞出了好多类似$Nim$游戏的博弈问题,而归根结底处理方法依然可以用异或法。

    这就又衍生出了$SG$函数和$SG$定理。

    先定义一下$mex$运算。

    $mex$指对于一个非负整数集合不在其中的最小数

    举个例子,mex{}=0,mex{0,1,2,3}=4,mex{1,2,3,4,5}=0。

    回到$SG$函数。

    对于一个局势,不同的操作会产生不同的后果,产生不同的新局势。

    当前局势的$SG$函数值,等于所有后继局势的$SG$函数的$mex$值。

    比如说,当$Nim$游戏中只有一堆棋子时,对于每个棋子数$SG$函数计算如下:

    SG[0]=mex{}=0

    SG[1]=mex{0}=1

    SG[2]=mex{0,1}=2

    SG[3]=mex{0,1,2}=3

    等等。

    有什么用呢?

    一个局势是$P-position$(先手必败)当且仅当其$SG$函数值为$0$。

    哇好厉害啊。

    接下来上$SG$定理:

    对于任意有限多个公平组合游戏的组合,其$SG$函数值等于所有子游戏$SG$函数值的异或和。

    能不能理解为,第一个游戏有好几堆棋子,第二个游戏有好几堆棋子……

    结果整个游戏就是好几堆棋子,其$SG$函数等于所有堆的$SG$函数的异或和。

    大概

    就这些了。

    模板靠手速,博弈靠智商

    (o_o)

  • 相关阅读:
    诺基亚为 Qt 增添 LGPL 授权选择
    Web Beans (JSR299): Q&A with Specification Lead Gavin King
    Web Beans (JSR299): Q&A with Specification Lead Gavin King
    诺基亚为 Qt 增添 LGPL 授权选择
    使用 Hibernate 进行大数据量的性能测试
    略谈如何在对话框创建视图类画图
    JBoss Seam 框架下的单元测试
    领域模型设计讨论与研究
    JBoss Seam 框架下的单元测试
    The use of FS/GS registers
  • 原文地址:https://www.cnblogs.com/LiGuanlin1124/p/10306053.html
Copyright © 2011-2022 走看看