Java教程

重修 博弈论

本文主要是介绍重修 博弈论,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

由来(doge)

Once upon a time, there were two clever people named Alice and Bob. This is how the story begins...

基础

\(N\) 为先手必胜局面,\(P\) 为先手必败局面。

先手被认为输的局势,我们可以称之为奇异局势。

巴什博弈

小学奥数题:甲乙轮流报数至多报 77 个数,至少报 11 个数,从 11 开始,谁先报到 5050 谁就胜利。甲先报,有无必胜策略?

威佐夫(Wythoff)博弈

有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

设两堆分别剩余 \(x,y\) 的局面为 \((x,y)\)。

小范围暴力打表得到奇异局势(pair 之中小的放前面):

\[(0,0),(1,2),(3,5),(4,7),(6,10),(8,13),(9,15),(11,18),(12,20),\dots \]

我们用 \((a_k,b_k)\) 表示。可以看出 \(b_k=a_k+k,a_k=\text{mex}\{a_1,b_1,\dots,a_{k-1},b_{k-1}\}\)

然后,通过「找规律」得到(在考场上不相信有人严谨证明,就是小范围打表得到的):

\[a_k=\lfloor k\phi\rfloor , b_k=\lfloor k\phi^2\rfloor , \phi=1.618\dots \]

Nim 博弈

结论:异或和为 \(0\) 则 \(P\),否则 \(N\)。

证明(真的只是证明,不知道当时先人咋想出来的结论):

首先必败局面有全 \(0\),异或和为 \(0\),满足要求。

接下来我们按石子总数来强归纳:

  • 若当前异或和为 \(0\),则任意取石子后异或和均不为 \(0\),均为后手创造必胜局面。

  • 若当前异或和不为 \(0\),我们构造一种方案使得操作后异或和为 \(0\),为后手创造败局面:设当前异或和为 \(v\),

K-Nim

P2490 [SDOI2011]黑白棋 & Loj3784. 「SDOI2011」黑白棋(数据水,过了不一定对)

有 \(n\) 堆石子,每次可从 \(k\) 堆石子中拿走任意数量的石子。

两个人轮流拿,谁不能拿谁输。

结论: 将每堆数量分别用二进制表示(设二进制最高位为 \(c-1\)),每一位对应相加(\(n\) 个 \(0/1\) 相加),得到 \(s_0,s_1,s_2,\dots,s_{c-1}\),奇异局面当且仅当\(\{s\}\) 均为 \((k+1)\) 的倍数

\(k=1\) 时即为正常 Nim。

证明不难,类似正常 Nim。

Anti-Nim

先手必胜:

  • 异或和为 \(0\) 且每一堆都只有 \(1\) 个石子

  • 异或和不为 \(0\) ,且至少有一堆多于 \(1\) 个石子

SG(人名 Sprague-Grundy)函数

分道:\(sg(x)=\text{mex}\{sg(son)\}\)

分局面:\(sg(x)=\text{xor}\{sg(son)\}\)

树上删边博弈

算是 SG 例题。

在树上,我们可以进行这样一种博弈游戏:

给出一个有 \(n\) 个点的树,有一个点作为树的根节点,游戏者只有两人。

游戏者轮流从树中删去边,删去一条边后,不与根节点相连的部分将被移走。

谁无路可走谁输。

简单的树手推一下各个 SG 值,然后找规律。

发现 \(sg(rt)=\text{xor}\{(sg(son)+1)\}\)。

证明对树的大小归纳,不难,略。

当然类似的树上博弈也类似做法,即 SG 扩展性好。

这篇关于重修 博弈论的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!