【博弈论】SG(Sprague–Grundy)定理证明和Nim游戏正确性证明
网上好像都是引用的维基,或者证的很不严谨
这里提供一个稍微严谨一点的证明,SG的部分基本上参考了维基 (自己想过,没想出来www)
要转载的话随便转载,就是不知道这垃圾玩意有没有转载的必要啊
定义
公平组合游戏,Nim游戏
满足如下条件的游戏被称为公平组合游戏:
- 两人轮流操作
- 如果有人不能操作,那么他就输了
- 对于当前状态,可以做的决策只与状态有关,和哪个人操作无关
Nim游戏:有 nnn 堆石子,二人轮流操作,每人可以在某堆中任意取若干个,但不能不取。如果某人不能取了那么它就输了。
常见的棋类就不是公平组合游戏,因为你不可以动别人的棋子。但Nim就是公平组合游戏,因为任何一方都可以拿任何一堆中的石子。
描述一个局面
对于一个局面,我们其实只关心它能到达哪些局面,因此我们用集合来描述一个局面,集合中包含它能到达的后继局面。 (因此你如果要展开这个集合,你会看到很多集合套集合)。如果它没有后继局面(即无法操作),我们用空集描述它。
特殊地,我们记 ∗n*n∗n 表示一堆含有 nnn 个石子的Nim局面。容易发现 ∗n={ ∗0,∗1...∗(n−1)}*n=\{*0,*1...*(n-1)\}∗n={ ∗0,∗1...∗(n−1)},是一个递归的结构。如果要展开就会变成集合套集合。
比如 ∗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′ 表示:现在同时进行 SSS 和 S′S'S′ 两个游戏,两边都不能操作就算输,这样的一个局面。如何描述它呢?
很明显,如果你要走一步,要么走 SSS 的一个后继,要么走 S′S'S′ 的一个后继。比如说你走了 SSS 的后继 sss,那接下来就是 sss 和 S′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+S′∣s∈S}∪{ S+s′∣s′∈S′}
把它递归展开就可以得到 S+S′S+S'S+S′ 局面的集合表达了。当然,这一般只用于给出形式化的定义,实际上不会用,因为复杂度爆炸。当我们需要考虑两个局面相加时,通常我们是根据意义来理解这件事情,想象发生了什么,并描述出关系,而不会用它来暴力展开。比如说你可以很容易发现,局面的相加满足交换律和结合律。
局面的等价性:通常在我们研究问题的过程中,如果有两个东西,把一个换成另一个不会影响问题,我们就说它俩等价
局面的等价怎么描述?如果根据输赢,你会发现,只要 n>0n>0n>0,∗n*n∗n 就是 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

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

被折叠的 条评论
为什么被折叠?



