最近在做多校题的时候,遇到了博弈论的题,自己推了老半天,还是没有找到必胜条件,于是下定决心开始学一下博弈论的套路。
Nim游戏是一种两个人玩的回合制数学战略游戏,它之所以经典是因为Sprague和Grundy独立地证明了一切Impartial Combinatorial Games都可以化规到Nim游戏,这一类游戏都具有以下的特点:
还是先举个例子来说明这个问题吧
两人从一堆硬币中轮流取硬币,每次取的数量硬币要在给定的序列a1,a2,…,ai中,没法继续取硬币的玩家输掉这场游戏。
这里我们先假定给出的序列为{1,2,4}
首先呢,硬币数为0的时候为P-position。这时我肯定输。同理 3 的状态也是P-position。
然后能让我赢的情况就是让对手走到P-position的位置上,那么我的位置就是N-position。这个例子中的1,2,4都是N-position。
那么,在游戏中,我一直都在想方设法的走到N-position的位置上,可是万一我如何移动,对手都可以走到P-position上,那我肯定会输的。
这是对以上三条移动规则的实例解释,体会一下,还是很好理解的。
根据上面几条规律可以从终态逆推出任何状态是N-position还是P-position。
还是给出这个样例中0~7的状态吧
x 0 1 2 3 4 5 6 7
state P N N P N N P N
为了我们可以更好的理解,可以将不同的状态根据状态转移的规则连接在一起,构成一个有向无环的图。这个图中有以下的特点:
Sprague-Grundy函数定义为不出现在F(X)中每一个元素的Sprague-Grundy函数的最小非负数,即 g(x)=mex{g(y):y∈F(x)}.
其中F(x)表示一个点能到达点的集合,也就是上文中的第二个特点。
例如:mex{0,1,3} = 2;
然后还是要提起上文中的例子:
那么写出0~7的SG(Sprague-Grundy)函数的值,如下:(终态SG值为0)
x 0 1 2 3 4 5 6 7
SG 0 1 1 0 1 2 0 2
对照上文中提到的状态,有没有发现SG值和状态之间的规律呢
这是偶然吗,当然不是,又不是傻,不是的话,还会写这个博客吗?
简单来说呢,出现这种情况的原因是,SG函数本身的性质,具体就不阐述了。反正意思就是,SG函数和之前的游戏状态转移规则在本质上是相符合的。
以上种种,只是在一个堆里取硬币的情况,如果将问题扩展到多个堆里取硬币呢?
而解决这种组合的游戏,就是要依靠Sprague-Grundy定理了。
上定理内容:
Sprague-Grundy定理:
设gi为一个游戏Gi的Sprague-Grundy函数,则组合游戏G=G1+G2+…+Gn的Sprague-Grundy函数g(x1…xn)=g1(x1)⊕g2(x2)⊕…⊕gn(xn)。
证明这里省略了。。。
OK,简单的理论只是准备完成,下一篇将来点实用的。