博弈论
bash:
一堆石子共 \(n\) 个,两人轮流从中取石子,规定每次至少取一个,最多取 \(m\) 个,最后取光者得胜。问两人博弈,他们都采用最聪明的策略,问最后谁可以必胜。
首先我们从小开始分析:
当 \(m>=n\) 时,先手可以一把抓完石子,这样先手必胜
当 \(n=m+1\) 时,先手无论怎么抓,都会留下 \(1\sim m\) 个石子,这样后手一把就可以抓完,这样先手必败
当 \(m+1<n<2*(m+1)\) 时,先手只要抓适当的石子就可以剩下 \(m+1\) 个石子,然后后手必输,那么先手必胜
当 \(n=2*(m+1)\) 时,后手可以采取这种策略,当先手抓 \(x\) 个时,后手就抓 \(m+1-x\) 个,这样就会把 \(m+1\) 的情况送给先手,那么先手必败
所以,当 \(n%(m+1)==0\) 时是必败态,其余为必胜态。
nim:
地上有 \(n\) 堆石子,每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取完,不能不取。每次只能从一堆里取。最后没石子可取的人就输了。假如甲是先手,且告诉你这 \(n\) 堆石子的数量,他想知道是否存在先手必胜的策略。
若一开始 \(a_{1} \oplus a_{2} \oplus a_{3}...\oplus a_{n}=0\) 那么后面状态 \(a_{1} \oplus a_{2} \oplus a_{3}...\oplus a_{n}!=0\)。如果 \(a_{1} \oplus a_{2} \oplus a_{3}...\oplus a_{n}!=0\),那么肯定可以通过一步转化让自己变成异或和为 \(0\)。证明看 \(nimk\) 或者 P1247
nimk:
你一次可以取 \(k\) 堆的石子。那么
\(sg\) 函数就是必败态为 0,一个结点的 \(sg\) 为后继状态的 \(mex\)。我们可以将所有 \(ICG\) 通过 \(sg\) 函数转化为 \(nimk\)。
将所有数都转化成二进制数,若所有二进制位上 \(1\) 的数量都能被 \((k+1)\) 整除,那么先手必败
终止局面每堆石子数都为 \(0\),为必败态。
否则任取一个二进制位搞 \(bash\)。具体看
反正就是这样。
通过这个 \(sg\) 函数,我们就可以把所有 \(ICG\) 游戏转换成 \(nim\) 游戏!
博弈论有个很好用的结论是若状态 \(S\) 能到达状态 \(x\),且对于所有状态 \(x\) 能到达状态 \(y\) 都有状态 \(S\) 能到达状态 \(y\),则状态 \(S\) 必胜。利用 \(sg\) 函数去易证。
这个成立的要求是包含,\(S\) 到达的状态包含 \(x\) 到达的状态并上 \(x\)
一个很搞笑的事情是我们不知道每个局面对应的 \(sg\) 函数是什么。所以我
需要推 \(sg\) 函数。比如在 \(nim\) 中,我们对于每堆石子分开考虑,那么我们只要知道每堆石子的 \(sg\) 就可以了。
首先 \(sg(0)=0,sg(1)=1,sg(2)=mex(sg(0),sg(1))=2\)。所以数学归纳易证 \(sg(x)=x\) 所以直接异或即可。
anti-nim:
一、当所有堆的石子数均为 \(1\) 时
- 石子异或和 \(t=0\),即有偶数堆。此时显然先手必胜。
- \(t≠0\),即有奇数堆。此时显然先手必败。
二、当有一堆的石子数 \(>1\) 时,显然 \(t≠0\) - 总共有奇数堆石子,此时把 \(>1\) 的那堆取至 \(1\) 个石子,此时便转化为第一个。
- :总共有偶数堆石子,此时把 \(>1\) 的那堆取完,同样转化为第一个
三、当有两堆及以上的石子数 \(>1\) 时 - \(t=0\),那么可能转化为以下两个子状态:
- 至少两堆及以上的石子数 \(>1\) 且 \(t≠0\),即转为三.
- 至少一堆石子数 \(>1\),由二可知此时必胜。
- \(t≠0\),根据 \(Nim\) 游戏的证明,可以得到总有一种方法转化为三.(1)状态。
观察三我们发现,三.(2)能把三.(1)扔给对面,而对面只能扔给你三.(2)或必胜态。所以当三.(2)时先手必胜。
树上删边游戏:
给定一棵 \(n\) 个点的有根树,每次可以删掉一个子树,则叶子节点的 \(SG\) 值为 0,非叶子节 点的 \(SG\) 值为其所有孩子节点 (\(SG\) 值 +1) 的异或和。
克朗原理:对于树上某一个点,它的分支可以转换为以这个点为根的一根竹子,这个竹子的长度等于它各个分支的边的数量的异或和。那么这其实就变成了一个 \(nim\) 游戏,每堆石子有子树 \(sg\) 值 \(+1\) 条边,那么就是全异或起来就行了
衍生:对于博弈论大部分问题,只要 \(SG\) 值相同,都可以相互转换。上面的证明是证明可以转换的原因。
拓展:给定一棵树,一些节点上接了一些环。
考虑偶环。他的 \(sg\) 值就是从所有子状态转移过来。因为删去一条边后,剩下的两条边就肯定不同,所以 \(mex\) 是 \(0\)。
考虑奇环。他的 \(sg\) 值就是从所有子状态转移过来。因为删去一条边后,剩下的两条边同奇偶,所以 \(0\) 取得到,\(1\) 取不到,所以 \(mex\) 是 \(1\)。
所以我们可以将偶环去掉,奇环变成一条边
综上,所有堆的石子数均 \(=1\) 且 \(t=0\) 或至少有一个堆的石子数 \(>1\) 且 \(t≠0\) 时,先手必胜。
有很多模型啊:
1.nim&a_{n}ti-nim
2.staircase-nim
3.bash
4.二分图匹配博弈/奇偶博弈 P4136
.....