关于sg函数的一些证明

Posted papercloud

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于sg函数的一些证明相关的知识,希望对你有一定的参考价值。



复习csp2019的时候稍微看了看博弈论,发现自己对于sg函数的理解完全不到位

有些定义甚至想都没想过

于是就口胡了一篇blog来安慰虚弱的自己



Question 1

对于一个满足拓扑性质的公平组合游戏

若定义一个函数(f)(f(P状态)=0)

假设当前状态为(a),它对局面的定义合法

那么(f=sg)

可以发现,它就是(Muti-sg)问题的核心,接下来我们希望证明这个问题的正确性

首先,先弄清几个定义


对于后继

  1. 指的是一步转移到的状态
  2. 后继一定不会等于当前状态


对于局面

它满足以下的性质(当然,性质的名字是我自己取的)

  1. 状态性:它本身也可以是一个状态
  2. 后继性:局面本身是状态的后继,或是后继的后继,等等
  3. 异或可行性:即(f(a))(a)所包含的所有局面(f)值的异或和
  4. 唯一改变性:后继与状态本身仅改变了一个局面,当然事实并不是如此,如果你会k异或的话,但我们不做探究
  5. 单向变化性:局面只会改变成为它的后继(如果它是一个状态)


证明

(f=sg) 等价于任意(a)满足,(f(a))(的后继mex{f(a的后继)})

因为状态之间的关系本质上是一个(DAG)(即满足拓扑性),所以可以通过归纳法来证明

假设一个状态(a),它的所有后继(包括后继的后继)的(f)值都等于(sg)

假设(a)可以分为局面(b_1)~(b_n),对应(f_1)~(f_n),它们等于(sg_1)~(sg_n)

所以(f(a)=f_1oplus f_2oplus . ..oplus f_n=sg_1oplus sg_2oplus . ..oplus sg_n)

如果(a)有一个后继(c),考虑(f(c)=f(a)oplus sg_i oplus sg_x),也就是把(b_i)这个局面改成了(x)局面


考虑(f(c))可以取哪些值?

首先,因为(sg_i e sg_x),所以(f(c) e f(a))

接下来证明(f(c))可以取到(0)~(f(a)-1)的所有数

对于一个值(valin[0,f(a)-1])

(k),满足(val=f(a) oplus k)

因为(val<f(a)),考虑(val)的最高的和(k)不同的一位,这一位必然存在并且在这一位上(k)(1)(val)(0)

这一位同时也是(k)的最高位

那么必然存在一个(sg_i)满足它的这位是(1),而对应的(sg_x)必然会小于(sg_i),因为它的这位是(0)

所以存在满足条件的(x)且它是(b_i)的后继

所以这样的(k)可以通过(sg_i oplus sg_x)构造得到


Question 2


翻硬币游戏

定义,有一些硬币排成一排,两人采用最优策略,每次可以翻动其中一些硬币(正变反,反变正),保证翻的硬币中最右边的硬币只能是从正翻到反,不能翻动者输


结论

每个状态的(sg)值等于当前所有为正面的硬币在序列中单独存在的状态的(sg)值的异或和


证明

设正面为(1),反面为(0)

‘...‘表示状态,...表示局面

把一个状态的(01)串倒过来,即‘00101‘变成(10100),把它看成一个二进制数,那么在游戏过程中这个数字递减

所以这个游戏是满足拓扑性质的


接下来我们设一个定义域为(01)串的函数(f)

  • (f(00...0)=0)
  • (f(00...01)=sg(00...01))
  • (一个串每一个f(一个01串)=igoplus_{每一个1} f(000..01)) ,其中对于第(i)(1),前面有(i-1)(0)


假设当前状态为‘011001‘

(f(011001)=f(01)oplus f(001)oplus f(000001))

‘011001‘有这样一个后继‘010100‘

可以说(f(010100)=f(01)oplus f(0001)=f(011001)oplus f(0011)oplus f(000001))

我们把(01)(001)(000001)看成是‘011001‘的三个特殊的局面

那么‘010100‘可以分拆成(01)(001)(0011)三个局面,尽管它们显得不那么特殊

这样的局面划分是合法的,因为可以看成是(000001)变成了(0011)这个局面,它满足异或和的性质

而很显然的是‘0011‘‘001100‘)确实是‘000001‘的一个后继


因为(f)满足这样的性质:

  1. (状态f(P状态)=0)
  2. 对于局面的定义合法

在此之前,我们已经证明了,对于这样的(f)(f=sg)


完结撒花★,°:.☆( ̄▽ ̄)/$:.°★



Blog来自PaperCloud,未经允许,请勿转载,TKS!

以上是关于关于sg函数的一些证明的主要内容,如果未能解决你的问题,请参考以下文章

关于poc脚本的一些问题

博弈论总结

证明SG中梯度的期望等于GD的梯度

几个关于js数组方法reduce的经典片段

洛谷 [P2148] E&G

博弈论