博弈论 套路开始的地方(NIM游戏和Sprague-Grundy函数)

Introduction

最近在做多校题的时候,遇到了博弈论的题,自己推了老半天,还是没有找到必胜条件,于是下定决心开始学一下博弈论的套路。

NIM游戏

Nim游戏是一种两个人玩的回合制数学战略游戏,它之所以经典是因为Sprague和Grundy独立地证明了一切Impartial Combinatorial Games都可以化规到Nim游戏,这一类游戏都具有以下的特点:

  1. 玩家只有两个人
  2. 游戏给定了状态之间转移的规则
  3. 玩家的状态有限
  4. .每个人轮流移动
  5. 有明确的状态结束情况

游戏状态定义

  • P-position代表会使上一个移动的玩家赢的状态。
  • N-position代表会使当前正在移动的玩家赢的状态。

游戏状态间转移的规则

  • 结局状态为P-position状态
  • 能到达P-position状态的状态的都是N-position状态
  • 只能到达N-position状态的是P-position状态

还是先举个例子来说明这个问题吧

两人从一堆硬币中轮流取硬币,每次取的数量硬币要在给定的序列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函数

从Game到Graph

为了我们可以更好的理解,可以将不同的状态根据状态转移的规则连接在一起,构成一个有向无环的图。这个图中有以下的特点:

  • 每一个点都是一种状态
  • 每一个点都有一个包含它能到达点的集合

引入函数的概念

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为0时,该位置为P-positiion.
  • SG值为非零是,该位置为N-position。

这是偶然吗,当然不是,又不是傻,不是的话,还会写这个博客吗?

简单来说呢,出现这种情况的原因是,SG函数本身的性质,具体就不阐述了。反正意思就是,SG函数和之前的游戏状态转移规则在本质上是相符合的。

Sprague-Grundy定理

以上种种,只是在一个堆里取硬币的情况,如果将问题扩展到多个堆里取硬币呢?
而解决这种组合的游戏,就是要依靠Sprague-Grundy定理了。
上定理内容:

Sprague-Grundy定理:
设gi为一个游戏Gi的Sprague-Grundy函数,则组合游戏G=G1+G2+…+Gn的Sprague-Grundy函数g(x1…xn)=g1(x1)⊕g2(x2)⊕…⊕gn(xn)。

证明这里省略了。。。
OK,简单的理论只是准备完成,下一篇将来点实用的。

你可能感兴趣的:(ACM_博弈论)