SG函数简要学习笔记
基本定理
ICG游戏
- 游戏有两个人参与,二者轮流做出决策。且这两个人的决策都对自己最有利。
- 当有一人无法做出决策时游戏结束,无法做出决策的人输。无论二者如何做出决策,游戏可以在有限步内结束。
- 游戏中的同一个状态不可能多次抵达。且游戏不会有平局出现。任意一个游戏者在某一确定状态可以作出的决策集合只与当前的状态有关,而与游戏者无关。
满足上述条件的问题我们称之为ICG游戏,ICG游戏属于组合游戏。最典型的NIM游戏,就是一种ICG游戏。
必胜态与必败态
定义P-position与N-position:
- P-position:必败态(简记为 \(P\)),即 Previous-position,你可以直观的认为处于这种状态的人一定会输
- N-position:必胜态(简记为 \(N\)),即 Next-position,你可以直观的理解为处于这种状态的人一定会赢
这仅仅是最直观的定义,更严谨的定义为:
- 无法移动的状态(即terminal-position)为 \(P\)
- 可以移动到 \(P\) 的局面为 \(N\)
- 所有移动都会进入 \(N\) 的局面为 \(P\)
DAG(有向无环图)中的博弈
在正式研究SG函数之前,我们先来研究一下DAG中的博弈:
给定一张有向无环图,在起始点有一枚棋子,两个顶尖聪明的人交替移动这枚棋子,不能移动的人算输
不要小看这个游戏,事实上,所有ICG问题都可以抽象为这种游戏(即把初始局面看做顶点,把从一个状态可以到另一个状态之间连边)
SG函数
下面我们来正式研究一下SG(Sprague-Grundy)函数
首先定义 \(mex\) 运算,这是一种集合中的运算,它表示 最小的不属于集合的非负整数
例如:\(mex\{1,2,3\}=0,mex\{0,2\}=1,max\{0,1,2,3\}=4,mex\{\}=0\)
对于给定的 DAG(有向无环图),定义每个点 \(x\) 的SG函数为:
\[SG(x) = mex\{ SG(y) | x \rightarrow y \}
\]
然而单单一个这样的空洞的函数是解决不了问题的,我们需要分析一下它的性质
所有汇点的SG函数为 \(0\)。
这个性质比较显然,因为汇点的所有后继状态都是空集
当 \(SG(x)=0\) 时,该节点为必败点。
由SG函数的性质知该节点的所有后继节点SG值均不为 \(0\),满足必败态的定义。
当 \(SG(x) \ne 0\) 时,该节点是必胜点。
由SG函数的定义可知该节点的后继节点中一定有一个节点的SG值为 \(0\),满足必胜态的定义。
神奇!