【知识点】博弈论

SG函数:

对于任何一个公平博弈游戏,我们都可以把每个局面看作一个顶点u,向它的子局面v连一条边,将整个游戏抽象成一张有向图。

对于一个非负整数集合S,我们定义$mex(S)$表示最小的不属于这个集合的非负整数。

对于一张有向无环图的每个顶点u,定义$SG(u)=mex(\{SG(v)\})$,那么$SG(u)=0\leftrightarrow u点是必败态$。

如果一个游戏可以分成若干个子游戏,那么整个游戏的SG值等于每个子游戏SG值的异或和。(注意子游戏和子局面是不同的)

 

Bash博弈:

问题:一堆物品,n个,两个人轮流取,每次能取$[1,m]$个物品,没法操作的输,问先手是否必胜。

结论:如果物品是$m+1$的倍数则先手必败,否则先手取$n\%(m+1)$个,然后后手取x先手跟着取$m+1-x$即可。

 

Bash博弈升级版:

问题:一堆物品,n个,两个人轮流取,每次能取$S={a_{1},a_{2},\cdots,a_{m}}$个物品,没法操作的输,问先手是否必胜。

结论:显然没结论,直接用SG函数dp即可。

 

Nim博弈:

问题:n堆物品,每堆$a_{i}$个,两个人轮流取,每次能从任意一个非空堆中取任意多个物品,没法操作的输,问先手是否必胜。

结论:令$SG(A)=a_{1}\oplus a_{2}\oplus \cdots \oplus a_{n}$,则$SG(A)=0$时先手必败,否则必胜。

证明:

可以直接采用SG函数的定义和性质证明,或者我们需要证明以下三个引理:

  1. 对于任何一个状态A满足$SG(A)>0$,它一定能转移到至少一个状态B满足$SG(B)=0$;
  2. 对于任何一个状态A满足$SG(A)=0$,它一定不能转移到任何一个状态B满足$SG(B)=0$;
  3. $SG({\emptyset})=0$。

引理3显然得证。 

考虑引理1,它等价于对于任意$a_{1}\oplus a_{2}\oplus \cdots a_{i} \cdots \oplus a_{n}=k$,存在一个i满足将$a_{i}$减少至$a'_{i}$后,有$a_{1}\oplus a_{2}\oplus \cdots a'_{i} \cdots \oplus a_{n}=0$。

构造一种方案即可。考虑取k的最高位p,找到一个在p这一位为1的$a_{i}$(显然一定存在),显然$a_{i}\oplus k<a_{i}$。

那么将$a_{i}$替换成$a_{i}\oplus k$,由异或的自反性可以验证其满足条件,得证。

考虑引理2,使用反证法,若存在$a_{i}\rightarrow a'_{i}$满足条件,则$a_{1}\oplus a_{2}\oplus \cdots a_{i} \cdots \oplus a_{n}=a_{1}\oplus a_{2}\oplus \cdots a'_{i} \cdots \oplus a_{n}$。

左右消去其他项,得到$a_{i}=a'_{i}$,实际上没有操作,于是假设不成立,得证。

 

阶梯博弈:

问题:n个台阶,每个台阶上$a_{i}$个物品,两人轮流操作,每次将若干个物品从某个台阶下移一级,最低0级,没法操作的输,问先手是否必胜。

结论:等价于拿出所有奇数台阶做Nim博弈,将奇数级的物品移到偶数级等价于拿走这些物品。

证明:在博弈过程中如果出现了将偶数级的物品移到奇数级上的情况(显然该操作是必败方做的),另一方只需要将这些物品继续下移即可回到原Nim问题。

 

反Nim博弈:

问题:n堆物品,每堆$a_{i}$个,两个人轮流取,每次能从任意一个非空堆中取任意多个物品,最后一个操作的输,问先手是否必胜。

结论:令$SG(A)=a_{1}\oplus a_{2}\oplus \cdots \oplus a_{n}$,当所有堆都只有1个物品时,若$SG(A)=0$则先手必胜;当至少有一堆多于1个物品时,若$SG(A)\neq 0$则先手必胜。

证明:显然每个子问题的$SG(x)=[x\neq 1]$,但在所有x都等于1时需要特判。

 

Moore's NimK:

问题:n堆物品,每堆$a_{i}$个,两个人轮流取,每次选定至多k个非空堆,每堆取任意多个物品,没法操作的输,问先手是否必胜。

结论:令$num_{p}$为所有$a_{i}$在二进制下p这一位1的个数之和对$(k+1)$取模的结果,则$num_{p}$均等于0时先手必败,否则必胜。

证明:

这个问题是划分不了子问题的,我们需要换一种思路证明。

显然每次操作对于任意p均可将$num_{p}$增加或减少$[1,k]$范围内任意值。

  • 那么对于一个必胜态,一定存在一种方案转移到必败态。
  • 对于一个必败态,需要将$num_{p}$增加或减少$k+1$才能转移到必败态,显然不可能。

 

树上博弈:

问题:一棵有根树,两人轮流操作,每次选一个非根点删掉以它为根的子树。无法操作者输。

结论:叶子节点SG值为0,其他节点的SG值为所有儿子SG值+1的异或和。

证明:不会,见https://wenku.baidu.com/view/25540742a8956bec0975e3a8.html

 

posted @ 2020-07-04 11:40  Fugtemypt  阅读(247)  评论(0编辑  收藏  举报