1.游戏有两个人参与,二者轮流做出决策。且这两个人的决策都对自己有利。
2.当有一人无法做出决策时游戏结束,无法做出决策的人输。无论二者如何做出决策,游戏可以在有限步内结束。
3.游戏中的同一个状态不可能多次抵达。且游戏不会有平局出现。
4.任意一个游戏者在某一确定状态可以作出的决策集合只与当前的状态有关,而与游戏者无关。
这样一类游戏可以用SG函数解决,称之为SG-组合游戏。
*对“最有利”的解释:本文所说的最有利,是指对于当前要做出决策的游戏者,如果他存在一种决策,使得后手进入到一个无论怎样做出决策都一定会输的状态,那么结局一定是当前的游戏者胜!
组合游戏中状态空间向图的转化
我们可以将组合游戏中的每一个状态抽象成图中的一个点,将每一步决策抽象成图中的一条边。我们将这个图称为该组合游戏的游戏图。
这样,对于组合游戏中的每一次对弈,我们都可以将其抽象成游戏图中的一条从某一顶点到出度为0的点的路径。
组合游戏向图的转化,并不单单只是为了寻找一种对应关系,它可以帮助我们淡化游戏的实际背景,强化游戏的数学模型,更加突出游戏的数学本质!
SG函数
SG函数是对游戏图中每一个节点的评估函数,定义如下:
f(v) = mex{ f(u) | 图中有一条从v到u的边 } mex{}:不属于该集合的最小自然数(0也是自然数)
事实上,所有的SG-组合游戏都存在相应的游戏图,我们完全可以根据游戏图的拓扑关系来逐一算出每个状态点的SG函数(事实上我们只需要知道该状态点的SG函数值是否为0)。
这样,我们就可以知道对于某一个状态,是先手必胜局还是先手必败局。这是不是说明我们已经将SG-组合游戏完满解决了呢? 显然不是!!
因为我们不光要考虑算法的正确性,还要考虑算法的时空开销,而上述方法显然没有考虑算法的时空开销,上述方法的瓶颈在于没有充分利用SG-组合游戏问题的特殊性质。
我们先引出游戏的和的概念。
定义:
游戏的和:考虑任意多个同时进行的SG-组合游戏,这些SG-组合游戏的和是这样一个SG-组合游戏,在它进行的过程中,游戏者可以任意挑选其中的一个SG-组合游戏,在它进行的过程中,游戏者可以任意挑选其中的一个单一游戏进行决策,最终,没有办法进行决策的人输。
*上述方法在计算K个单一SG-组合游戏的和时,所消耗的时间、空间复杂度是分别计算这K个单一SG-组合游戏所消耗的时间、空间复杂度的乘积。
但如果我们能更好地利用SG-组合游戏的性质的话,我们可以将上一段的最后一字——“积”——改成“和”。这就是我们继续研究SG-函数的意义,也就是这篇论文的意义所在。
最后,直接给出SG函数的性质:
(1)对于任意的局面,如果它的SG值为0,那么它的任何一个后继局面的SG值不为0;
(2)对于任意的局面,如果它的SG值不为0,那么它一定有一个后继局面的SG值为0。
定义NIM-模型
……
这道题每一堆石子的SG函数值显然为该堆石子的数目,根据SG函数的特点,最后所有堆石子的SG函数的和:sg1^sg2^....^sgn 先手败当且仅当该值为0,证明略。
取石子游戏虽然是组合游戏中一道最基础的题目,但是它却代表了一类经典的组合模型。
事实上,每一个简单SG-组合游戏都可以完全等效成一堆数目为K的石子,其中K为该简单游戏的SG函数值。这样的等效是充要的。
定理:
在我们每次只能进行一步操作的情况下,对于任何的游戏的和,我们若将其中的任一单一SG-组合游戏换成数目为它的SG值的一堆石子,该单一SG-组合游戏的规则变成取石子游戏的规则(可以任意取,甚至取完),则游戏的和的胜负情况不变。
定理的一个变形是:若只考虑游戏的和,我们可以将其中的任一游戏换成SG值相等的其他游戏,游戏的和的SG函数值不变。
定理告诉我们,在考虑游戏的和时,每一个单一游戏的具体细节是可以被忽略的,我们所关心的只是SG函数值。所以我们贾志可以将组成它的所有子游戏换成相应数目的一堆石子。这样,所有的游戏的和都等价成NIM游戏。