博弈论 课上摸鱼小笔记
打算刷博弈论的题了,补充一下前置知识,不然除了基础题猜规律啥都不会做了
对于普通的P/N分析,需要记住定义才能准确写出记忆化搜索:
1.无法进行任何移动的局面是P
2.存在后继局面为P的局面为N
3.所有后继局面为N的局面为P
Bash的粗糙证明过程
若石子为\(n\)最多取\(m\)个且符合\(n=(m+1)r+s,s<m+1\),先手总有方法留下\(n=(m+1)r'\)的局面给对手
Nim的证明过程
根据P/N分析需要证明三个命题
1.无法移动的局面为P
无论多少个0异或都是0
2.N可以移动到P
若\(a_1⊕a_2⊕...a_n=k,k!=0\),必可找出\(a_i\),其最高位是\(k\)的最高位,\(a_i'=a_i⊕k<a_i\)(最高位必可去掉所以肯定成立
那么\(a_i\)替换为\(a_i'\)可以使异或和为\(0\),记原式为\(Xor\),因为取出了\(a_i\),加入了\(a_i⊕k\),所以\(Xor⊕a_i⊕a_i⊕k=k⊕k=0\)
3.P无法移动到P
当前局面\(a_1⊕a_2⊕...a_n=0\),若要移动\(a_i\)到\(a_i'\)使得原式变为\(0\),既\(a_i⊕a_i'=0\),显然两者只能相等,而这是非法操作
SG函数
\(mex{S}\)指集合\(S\)中不存在的最小自然数
基本应用
对于一个给定的有向无环图和初始点的棋子,无法移动者输
定义关于图的每个顶点的\(SG(x)=mex{SG(y),x->y}\)
根据定义显然有
1.没有出边的局面\(SG(x)=0\)
2.若\(SG(x)=0\),则存在后继\(y\)使得\(SG(y)!=0\)
3.若\(SG(x)!=0\),则所有后继\(y\)都有\(SG(y)=0\)
对比前面的P/N分析,发现简直一毛一样
那么这个工具就可以替代P/N分析进行扩展
扩展应用
结论:游戏和的SG=子游戏的SG异或和
根据这个结论再来肝一遍nim,单堆的nim显然\(SG(x)=x\),那么n堆nim就是\(a_1⊕a_2⊕...a_n\),很方便right?
放一下没时间看的anti-SG,笔记有空改
https://blog.csdn.net/acm_cxlove/article/details/7839276
anti-SG
anti-nim为例,最后策略集为空则胜
最先看到的应该是分奇偶的非充裕堆判断,若为偶数则先手胜,否则后手胜
按SG分类
SG!=0时
1.只有一堆大于1,先手可以把这堆化为0或者1,然后从上面的结果来看,先手必胜
2.大于一堆大于1,先手可以把SG=0的局面留给对手,先手必胜
3.没有一堆大于1,那就是只有奇数个非充裕堆的情况,先手必败
SG=0时
1.只有一堆大于1,不存在此情况
2.大于一堆大于1,先手无论如何操作,对于后手的局面总有大于一堆大于1,且后手SG!=0,从上面讨论的结果来看,先手必败
3.没有一堆大于1,既只有偶数个非充裕堆的情况,先手必胜
这个过程比较麻烦,要学会利用结论
结论:
单一SG=0时子游戏结束,先手必胜的条件需满足
1.SG!=0且存在单一SG>1
2.SG=0且所有单一SG<=1
那刚才的anti-nim游戏就分别对应于
1.SG!=0且至少一堆大于1
2.SG=0且所有堆为1
every-SG
暂时不知道具体使用方法,先记下结论
if(u终止) step(u)=0
if(sg(u)>0 ^ u->v ^ sg(v)=0) step(u)=max(step(v))+1
if(sg(u)=0 ^ u->v) step(u)=min(step(v))+1
先手必胜:单一SG的最大值为奇数

浙公网安备 33010602011771号