【博弈论】SG(Sprague–Grundy)定理证明和Nim游戏正确性证明

本文提供了一个关于SG(Sprague–Grundy)定理和Nim游戏正确性的较严谨证明。首先定义了公平组合游戏和Nim游戏,接着详细介绍了局面描述、胜负判定和局面关系。通过引理和结构归纳法证明了SG定理,并证明了Nim游戏的异或和判断胜负的正确性。

【博弈论】SG(Sprague–Grundy)定理证明和Nim游戏正确性证明

网上好像都是引用的维基,或者证的很不严谨

这里提供一个稍微严谨一点的证明,SG的部分基本上参考了维基 (自己想过,没想出来www)

要转载的话随便转载,就是不知道这垃圾玩意有没有转载的必要啊

定义

公平组合游戏,Nim游戏

满足如下条件的游戏被称为公平组合游戏:

  • 两人轮流操作
  • 如果有人不能操作,那么他就输了
  • 对于当前状态,可以做的决策只与状态有关,和哪个人操作无关

Nim游戏:有 nnn 堆石子,二人轮流操作,每人可以在某堆中任意取若干个,但不能不取。如果某人不能取了那么它就输了。

常见的棋类就不是公平组合游戏,因为你不可以动别人的棋子。但Nim就是公平组合游戏,因为任何一方都可以拿任何一堆中的石子。

描述一个局面

对于一个局面,我们其实只关心它能到达哪些局面,因此我们用集合来描述一个局面,集合中包含它能到达的后继局面。 (因此你如果要展开这个集合,你会看到很多集合套集合)。如果它没有后继局面(即无法操作),我们用空集描述它。

特殊地,我们记 ∗n*nn 表示一堆含有 nnn 个石子的Nim局面。容易发现 ∗n={ ∗0,∗1...∗(n−1)}*n=\{*0,*1...*(n-1)\}n={ 0,1...(n1)},是一个递归的结构。如果要展开就会变成集合套集合。

比如 ∗4={ ∅,{ ∅},{ ∅,{ ∅}}}*4=\{\emptyset,\{\emptyset\},\{\emptyset,\{\emptyset\}\}\}4={ ,{ },{ ,{ }}}

对于一个局面,如果是先手必胜,我们说它是 NNN 的,否则就是 PPP 的。

关于胜负情况,好像没有找到相关的函数描述。这里我们用 win(S)win(S)win(S) 表示局面 SSS 的胜负情况,其值为 PPP 或者 NNN

判定局面的胜负性:

  • 如果当前局面可以到达 至少一个 PPP 局面,那当前是 NNN 局面
  • 如果当前局面后继 全部都是 NNN 局面,那当前是 PPP 局面

局面间的关系

局面的和:对于两个局面 S,S′S,S'S,S,定义 S+S′S+S'S+S 表示:现在同时进行 SSSS′S'S 两个游戏,两边都不能操作就算输,这样的一个局面。如何描述它呢?

很明显,如果你要走一步,要么走 SSS 的一个后继,要么走 S′S'S 的一个后继。比如说你走了 SSS 的后继 sss,那接下来就是 sssS′S'S 两个游戏同时进行,是一个子结构。另一边同理。因此我们可以写出这样的定义式:

S+S′={ s+S′∣s∈S}∪{ S+s′∣s′∈S′}S+S'=\{s+S'|s\in S\}\cup\{S+s'|s'\in S'\}S+S={ s+SsS}{ S+ssS}

把它递归展开就可以得到 S+S′S+S'S+S 局面的集合表达了。当然,这一般只用于给出形式化的定义,实际上不会用,因为复杂度爆炸。当我们需要考虑两个局面相加时,通常我们是根据意义来理解这件事情,想象发生了什么,并描述出关系,而不会用它来暴力展开。比如说你可以很容易发现,局面的相加满足交换律和结合律。

局面的等价性:通常在我们研究问题的过程中,如果有两个东西,把一个换成另一个不会影响问题,我们就说它俩等价

局面的等价怎么描述?如果根据输赢,你会发现,只要 n>0n>0n>0∗n*nn 就是 NNN 的。但显然我们很有必要关心每一堆里具体有多少石子。因此只根据输赢描述肯定不行。

我们发现问题出在把局面组合起来的时候。因此我们这样描述:对于局面 G,G′G,G'G,G∀H,win(G+H)=win(G′+H)\forall H,win(G+H)=win(G'+H)H,win(G+H)=win(G

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值