几种常见的博弈模型

巴什博奕(Bash Game)

首先考虑一个简单的例子:

>A和B一起报数,每个人每次最少报一个,最多报4个。轮流报数,看谁先报到30.

因为最多可以报4,最少报1,如果对方开始报,那么我开始总是可以报5的。依次类推,我都可以想法儿报5的倍数。所以,结论就是,先手必输。

可以将例子抽象一下:

如果最多可以报n,最少可以报m个,看谁先报到a;

判断a%(m+n)是否大于n即可。如果大于后手胜,否则先手胜。

原先在东师的校赛上,见过类似的一道题。当时,还不知道这个模型。自己也没搞出来。唉!智商压制呀!

威佐夫博奕(Wythoff Game)

这个模型就比上一个难了一点。

适用的游戏情况
首先有两堆石子,博弈双方每次可以取一堆石子中的任意个,不能不取,或者取两堆石子中的相同个。先取完者赢。

我们首先用一个二维数组来记录两堆石子的剩下的数量。
如果一个人遇到了(0,0)这个状态,那么他已经输了。我们把这种状态叫做失败态,也叫奇异状态。
那么向前推一下,接下来的失败态为(1, 2),(3, 5),(4, 7),(6, 10),……

如果我们将失败态中的第一个数字和第二个数字分别存储在a,b两个数组里,那么可以得到的规律为:

  • b[i] = a[i]+i; (i从0开始)
  • a[i] 是之前状态没有出现的最小整数

由以上规律可以算出(反正我是不会了,上结论吧):

a[i] = [i*(1+√5)/2] 或者 a[i] = [i * 0.618]; (这里的中括号表示向下取整)

所以只要判断一下初始堆的情况是否是失败态。失败态先手必败,否则后手必败。

尼姆博奕(Nimm Game):

这就是比较著名的NIM游戏了,和SG函数有很大的关系哦。
这里就不再赘述了,详见我其他的博文。

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