博弈论笔记
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 高手过招(有向图游戏的和)

浙公网安备 33010602011771号