引言
在生活中五子棋也是一种先手有必赢策略的游戏,有人会说五子棋先手我也会输啊,所以
博弈论问题都有个类似如“参与者足够聪明”,“两人都不犯错"的前提。
在此前提下,讨论几种常见的博弈情形
一:巴什博弈
问题描述:n个物品,两个人轮流取[1,m]个,最后取光者胜利,判断先手胜还是后手胜?
分析
考虑到 若n=m+1 那么 第一个人不论如何取都不能取胜。
进一步我们发现 若 n=k*(m+1)+r; 先取者拿走 r 个,那么后者再拿[1,m]个
n=(k-1)*(m+1)+s; 先取者再拿走s 个 最后总能造成 剩下n=m+1 的局面。
因此,此时先手有必赢策略。
相对应的,若n=k*(m+1) 那么先取者必输。
二:尼姆博弈(Nimm Game)
问题描述:n堆物品,第i堆有ai个,两个人轮流选择一堆,并从中选取走[1,ai]个,最后取光者胜利,判断先手胜利还是后手胜利?
分析:
先说点别的:
N必胜状态,P必败状态
N一定是从P转移过来的,P一定不能从N转移过来(但可能p的后继状态里有N,只是不会转移过去)
为什么呢?
比如说,你现在处于优势,你不可能把你再陷入劣势
你现在处于劣势,你肯定要想尽方法把你带进优势
Nim游戏有个定理
先手必胜,当且仅当a1xora2xora3xor.....xoran!=0
为什么呢?为了方便把前面这一坨xor设为Y
如果Y=0,则一定不存在一个k,使得Yxork==0
如果Y!=0,则一定存在一个K,使得Yxork==0
同理N和P,证毕
三.SG函数
先定义一个
Mex运算:****最小不属于这个集合的最小整数
例如mex{0,1,2,4}=3、mex{2,3,5}=0、mex{}=0
对于一个给定的有向无环图,定义关于图的每个顶点的SG函数g如下:
g(x)=mex{ g(y) | y是x的后继 (y可能会有多个)}。(这个公式很重要,反复看)
SG函数性质:
显然没有出边的顶点,其g值为0(因为它的后继集合是空集)
然后对于一个g(x)==0的顶点x,它的所有后继y都满足g(y)!=0(Mex运算)
再就对于一个g(x)!=0 的顶点,必定存在一个后继y满足g(y)=0。(出度不为0的一定有儿子)
注意一定要把这三句话弄懂
以巴什博弈为例,n=6,m=3时,Si表示还剩i个物品的状态,S0是终止状态
显然SG(S0)=0;
因为S1的唯一后继状态是S0根据Mex运算,SG(S1)=1
因为S2的后继状态有S0,S1根据Mex运算,SG(S2)=2
因为S3的后继状态有S0,S1,S2根据Mex运算,SG(S3)=3
因为S4的后继状态只有S1,S2,S3根据Mex运算,SG(S4)=0
例题;
N个结点的有向无环图,图中某些节点上有棋子,两名玩家交替移动棋子。玩家每一步可将任意一颗棋子沿一条有向边移动到另一个点,无法移动者输掉,问先手必胜还是后手必胜
分析:
建图完毕后,将每一个出度为0的SG函数设为0,相应的可以dfs每一个点的SG函数
最后整个游戏的SG函数值就是每一个棋子的SG函数值异或起来。当SG==0时,先手必败