zoukankan      html  css  js  c++  java
  • 学习笔记 SG函数

    学习笔记 SG函数

    博弈论补的太晚了。

    定义

    对于一种公平博弈游戏(博弈状态的先后关系可构成一个拓扑图),构造 (SG(x)) 函数为博弈状态为 (x) 时的一个非负整数值,我们给定其一个值,由下列公式得到:

    [SG(u)=egin{cases}0&(vin exttt V)\ exttt{mex}{SG(v)}&( exttt{otherwise})end{cases} ]

    以及一个重要的性质((SG) 定理):后手能赢,当且仅当 (igoplus_{uin exttt U} SG(u)=0),否则先手赢

    其中 (v)(u) 可以一步得到的子博弈状态,( exttt V) 是终局,( exttt U) 是起始状态,( exttt{mex}) 指的是集合中第一个未出现的非负整数。

    注意这里的多个 (SG(u)) 代表的可能是多个子博弈游戏,例如经典 (nim) 取石子游戏多个石子堆对应的就是多个 (SG(u))

    证明

    我们先只讨论起始状态异或和等于 (0) 的情况。

    因为终局情况一定是多个子博弈游戏都到了 (SG(v)) ,此时显然 (igoplus SG(v)=0) 满足定理。

    所以我们只要证明在任何情况下,不管先手如何走,后手都可以走一步使得异或和等于0。

    当一个子博弈游戏被先手从 (SG(u)) 到了 (SG(v)) 出现两种情况,证明如下:

    • (SG(v)>SG(u))

      因为v的SG值较大,所以v的子博弈状态一定有一个值为 SG(u) 此时先手走向值为SG(u)的子博弈状态状态即可。

    • (SG(v)<SG(u))

      有点麻烦。。。

      (SG(u))(a)(SG(v))(b),原本的状态是 (aoplus a=0) ,然而现在变成了 (aoplus b) ,所以我们只要找到其它博弈状态的 (SG) 函数中有一个数 (c),将 (c) 变成(coplus aoplus b),此时原始就变成了 (aoplus(aoplus b)oplus b=boplus b=0)

      因此只要保证 (coplus aoplus b) 一定要小于 (c),问题就变成证明这个 (c) 必定存在。

      (x_i) 表示 (x) 的二进制第 (i) 位)

      我们再令 (a)(b) 最高的不相同的二进制位为 (i)

      • (a_i=1),那么因为原来除 (SG(u)) 外的 (SG) 函数异或起来是 (a),所以必然有一个 (SG) 函数值为 (c),满足 (c_i=1),此时 (aoplus b) 的最高非 (0) 位就是 (i),那么显然有 (coplus aoplus b) 小于 (c)
      • (a_i=0),那么 (i) 必然不是 (a) 的最高非位,而其它 (SG) 函数必然有一个 (c),它的最高非 (0) 位和 (a) 相同,此时 (coplus aoplus b) 最高非 (0) 位是低于 (c) 的最高非 (0) 位。
        upd 2021/05/25 :
        发现假了,第二种情况根本不可能,因为 (b < a),所以 (a)(b) 的最高不相同的位一定是 (a_i = 1 & b_i = 0)

    如果开始博弈状态异或和不为 (0),那么先手显然可以走一步使异或和等于 (0),和上述的方法一样。

    (Large{Q.E.D})

    例题

    这种东西一找一大片吧。。。

    实际为了掩盖咕咕咕

  • 相关阅读:
    SQL Server(00):约束Constraint
    SQL Server(00):T-SQL批处理
    SQL Server(00):事务
    SQL Server(00):锁
    SQL Server(00):表变量和临时表
    SQL Server(00):T-SQL游标
    SQL Server(00):用户自定义函数(UDF)
    SQL Server(00):存储过程Stored Procedure
    C#(99):微软报表A4纸大小规则
    C#(99):C#互操作
  • 原文地址:https://www.cnblogs.com/RedreamMer/p/14714873.html
Copyright © 2011-2022 走看看