博弈论笔记

NIM游戏:

n堆石子,每堆数量{a1,a2,a3...an},每次移动是在一个石堆中取走任意数量(至少一个)的石子,当轮到的一方所有的石子堆都是空的时,判负。


先引入一个东西

判定引理:

  • 终局为必败局面(a1=a2=a3=...an=0)。
  • 对于任意必胜局面,都存在一种合法的必败局面。(你不按必胜策略走也有可能输)。
  • 对于必败局面,进行任何操作,都会得到必胜局面。(对方只要按最优策略走,怎么搞都是输)。

方一:

将每种局面看成一个节点,让所有节点形成一个DAG(有向无环图),再爆搜(听着就是要爆)。

举个例子:三堆石子时

(0,0,0)必败

(0,0,n)必胜

(0,1,1)必败

(0,1,n)必胜

(0,n,n)必败

就这样推下去。

方二:

Bouton's THeorem(我也不知道是什么)

对于一个Nim游戏的局面定义:

sg(S)=a1a2a3^...an

若sg(x)=0,为必败局面 sg(x)!=0为必胜局面;

如(1,1,3)sg值为113=3,必胜;

有向图游戏:

一个DAG,一个棋子在上边,双方轮流推动它沿着有向边移动,直到面对棋子无路可走的人判负


其实Nim游戏就是一种有向图游戏(每种情况看成节点)

对判定引理的数学描述sg函数:

首先定义mex运算为最小的不属于这个集合的自然数

如mex{0,1,2,4}=3,mex{2,3,5}=0;mex{空集}也是0;

sg(x)=mex

sg(x)=0必败局面;sg(x)!=0,必胜局面;

如上面的Nim游戏:假设有两堆石子(0,0)的sg=0;

则由于(1,0)只可以推向(0,0),所以(1,1)的sg=1;

同理,(0,2)可以推向(0,1),(0,0),所以(0,2)的sg=2;

似乎这个东西没啥用,又是sg又是mex花里胡哨的。

其实此时确实不如直接看判定引理的文字描述来的清晰,但是在另一种题里就不一样了。


有向图游戏的和:

就是n局有向图游戏同时玩,两人轮流走,一次只能动其中一局游戏的一颗棋子,直到无棋子可走的人判负。

类似以前在宿舍打斗地主的时候有人会出个将我军,我反手一个闪。

用Nim游戏做例子的话就是n局Nim游戏一起玩,一人一次只能抽一局中的一个堆来拿石子。

此时判定引理就废了,因为判定引理只适用于单局游戏。此时sg却仍然适用,不过变成了

sg(x)= sg(x1)sg(x2)sg(x3)...sg(xn)

此时sg就有用多了。

其实那个Bouton's THeorem也是一样的道理,把n局只有一堆石子的Nim游戏同时玩其实就是一局有n堆石子的Nim游戏。

题目:

P1247 取火柴游戏(n堆石子Nim游戏)

P1290 欧几里德的游戏

P2575 高手过招(有向图游戏的和)

posted @ 2022-02-17 11:33  yyx525jia  阅读(18)  评论(0)    收藏  举报