游戏王MD中的概率问题(一):n连后手问题
前言
游戏王的先后手差距
游戏王/YGO是一个先后手差距非常大的卡牌游戏,先攻玩家如果在第一回合不受干扰的话往往就直接意味着胜利。
虽然有各种各样的“手坑”让后手玩家可以在先手玩家的第一回合进行干扰,然而作用有限:
- 先手玩家可以无效它们
- 即使受到少量干扰,1卡动多补点的现代卡组仍然能做大场
- 先手玩家也能使用手坑来干扰后手玩家(点名批评增殖的G)
因此即使先手少抽1张牌并且没有战斗阶段,先手仍然有着巨大的优势,以致于硬币的正反很大程度上左右最终的胜负。
在一个抛硬币决定先后的游戏里喜提n连硬币反面概率有多大呢?是谁11连后手跑来算概率
改成猜拳决定先后的话概率上是没什么区别的,还是会有倒霉蛋喜提10+连后手。
算是(久违地)引起了我整点数学的兴趣。由此顺便联想到了不少相关的概率问题(某卡组升段/掉段的概率、bo3连胜制的胜率、...),零零碎碎算了不少内容最终成了这篇文章。
由于篇幅问题,以及大量的公式,本文已被拆分以改善加载速度。系列文章如下:
- (一):本文,计算了硬币出现n连反面的投掷次数期望和概率
- (二):计算了MD天梯升降小段的期望局数和升段概率,与Bo2及衍生赛制Bo∞的期望局数和双方胜率
TL;DR
这篇文章的主要计算结果都在这里,如果你对冗长的计算没什么兴趣也许可以不看之后的计算。结果就已经挺冗长了
本文主要利用生成函数讨论了出现n连硬币正面的期望投掷次数和概率。主要计算结果如下:
设单次硬币正面概率为p,那么为了出现连续n次硬币,期望的抛硬币次数是
E(m)=pn(1−p)1−pn
抛了m次硬币,有连续n次正面的概率是
P(Zm≥n)=j=1∑⌊nm⌋(j−1m−nj)(p−1)j−1pnj[p+j(1+m−nj)(1−p)]
当m≫n且n充分大时,
P(Zm≥n)∼1−e(m+1)(p−1)pn
抛多少次硬币会出现连续n次正面?
首先我们想知道大概抛多少次硬币会出现连续n次正面,换句话说,想要知道出现连续n次正面所需要的投掷次数的期望。
抛一枚硬币,记正面的概率为p. 记恰好m次投掷硬币获得n次连续正面的概率为Pm,n
显然有,Pn,n=pn 以及 Pm,n=0 (m<n)
对于m>n,即前n次没能投出全正面的情形。我们考虑首次出现反面时的投掷次数i,不难得到递推式:
Pm,n=i=1∑npi−1(1−p)Pm−i,n
考虑数列{Pm,n}m的生成函数:
Gn(x)=i=0∑∞Pi,nxi=i=1∑∞Pi,nxi(for n≥1)(2)
综合(1)和(2)可以得到:
Gn(x)[1−(1−p)x−p(1−p)x2−⋯−pn−1(1−p)xn]=Pn,nxn=pnxn(3)
于是,
Gn(x)[1−(1−p)x1−px1−pnxn]=pnxn
Gn(x)=1−x+(1−p)pnxn+1(1−px)pnxn(4)
所以使得连续n次出现正面需要的投掷次数期望为En=Gn′(1)=pn(1−p)1−pn
方差则为
Dn=G′′(1)+G′(1)−[G′(1)]2=p2n(1−p)22[(n+1)pn+1−p2n+1+p2n−(n+2)pn+1]+pn(1−p)1−pn−[pn(1−p)1−pn]2=p2n(1−p)21−(2n+1)(1−p)pn−p2n+1
你问咋算这么复杂的导数?
出门右转Wolfram Alpha,或者使用本地的Mathematica/Maple/SymPy之类的符号计算软件。
对于p=21,有Gn(x)=2n+1(1−x)+xn+1(2−x)xn,En=2n+1−2,Dn=22n+2−(2n+1)2n+1−2
分析
也就是说如果硬币公平的话,平均每30把就会出现4连先手和4连后手。不过结果的标准差基本上和期望一样大,所以结果很不稳定,可能没啥参考价值?
抛m次硬币连续至少n次正面的概率
比起期望,我们当然对概率本身更加感兴趣,不过这计算就繁琐了不少。
闭形式
记抛m次硬币出现的最长连续正面次数为Zm,那么我们要求的就是P(Zm≥n)的大小。
沿用上一节的记号,我们有
P(Zm≥n)=i=0∑mPi,n(5)
也就是说,所求的就是数列{Pm,n}m的前m项和。由于前面已经算出了{Pm,n}m的生成函数,我们可以直接写出P(Zm≥n)的生成函数Fn(x)
Fn(x)=1−x1Gn(x)=(1−x)[1−x+(1−p)pnxn+1](1−px)pnxn=1−x1+1−x+(1−p)pnxn+1pnxn−1(6)
定义1. (系数算子) [xn]f(x)
对幂级数i=0∑∞aixi以及n∈Z 定义
[xn]i=0∑∞aixi={an0,if n≥0,,if n<0.
按照定义易得以下性质:
- [xn]f(x)=Γ(n+1)f(n)(0),if n≥0
- [xn]xmf(x)=[xn−m]f(x)
按照生成函数的定义,我们有
P(Zm≥n)=[xm]Fn(x)=[xm](1−x1+1−x+(1−p)pnxn+1pnxn−1)=[xm](i=0∑∞xi+(pnxn−1)i=0∑∞[x−(1−p)pnxn+1]i)=1+[xm](pnxn−1)i=0∑∞[x−(1−p)pnxn+1]i=1+(pn[xm−n]−[xm])i=0∑∞xi[1−(1−p)pnxn]i=1+(pn[xm−n]−[xm])i=0∑∞xij=0∑i(ji)(−1)j(1−p)j(px)nj=1+i=0∑m(pn[xm−n−i]−[xm−i])j=0∑i(ji)(−1)j(1−p)j(px)nj=1+pnj=0∑⌊nm⌋−1(jm−n(j+1))(p−1)jpnj−j=0∑⌊nm⌋(jm−nj)(p−1)jpnj=1+j=0∑⌊nm⌋−1(jm−n(j+1))(p−1)jpn(j+1)−1−j=1∑⌊nm⌋(jm−nj)(p−1)jpnj=j=1∑⌊nm⌋(j−1m−nj)(p−1)j−1pnj−j=1∑⌊nm⌋(jm−nj)(p−1)jpnj=j=1∑⌊nm⌋(j−1m−nj)(p−1)j−1pnj[1−jm−(n+1)j+1(p−1)]=j=1∑⌊nm⌋(j−1m−nj)(p−1)j−1pnj[p+j(1+m−nj)(1−p)](7)
渐进分析
从闭形式中很难看出来概率的变化趋势,为此我们还需要一个渐进估计表达式。
这一节我们将得到:当m≫n且n充分大时,有
P(Zm≥n)∼1−e(m+1)(p−1)pn(8)
亚纯估计定理
道理上来讲,生成函数实际上只是形式幂级数,是否收敛并不重要。但如果我们知道它是收敛乃至解析的,那么就能用上一些分析学的方法来对其系数做出估计。
定理:亚纯生成函数的估计
设f(z)是一个亚纯函数,它在包含原点的区域R内除了有限个极点外是解析的.
设R>0是模最小极点的模,z0,⋯,zs是f(z)的所有模为R的极点,R′>R是f(z)次小模极点的模。
那么对∀ε>0,有
[zn]f(z)=[zn](j=0∑spp(f;zj)+O((R′1+ε)n))
其中pp(f;zj)=j=1∑r(z−zj)ja−j为f在r阶极点zj处Laurent展开的主要部分。
这个定理在《发生函数论》的第5章可以找到,这里我们就不加证明直接拿来了。这个定理表明,决定函数系数的最主要因素是它的模最小极点。
进一步,如果z0是f(z)的(其中一个)模最小极点,且它是r阶极点,那么它对系数的贡献为
[xn]pp(f;z0)=[xn]j=1∑r(z−z0)ja−j=[xn]j=1∑rz0j(1−z0z)j(−1)ja−j=[xn]j=1∑rz0j(−1)ja−jk=0∑∞(kk+j−1)(z0z)k=[xn]k=0∑∞zk(j=1∑rz0k+j(−1)ja−j(j−1k+j−1))=j=1∑rz0n+j(−1)ja−j(j−1n+j−1)
特别地,如果z0是1阶极点,那么它的贡献就是−z0n+1Res[f(z),z0].
分析极点阶数
借由亚纯估计定理,我们的思路就是分析生成函数的极点。
回到P(Zm≥n)的生成函数(6),由于1−x1只是单纯给各项系数加上个1,我们只需考虑
Qn(x)=1−x+(1−p)pnxn+11−pnxn
NOTE
Qn(x)=1−x1−Fn(x)=i=0∑∞[1−P(Zm≥n)]xi=i=0∑∞P(Zm<n)xi,因此Qn(x)就是P(Zm<n)的生成函数,
为了得到Qn(x)的极点,我们考虑方程
φ(x)=def1−x+(1−p)pnxn+1=0(9)
的根。
首先不难发现φ(p1)=0,但x=p1是个可去奇点,并不符合要求。
进一步分析,来求极值:
φ′(x)=(n+1)(1−p)pnxn−1
极值点xm=p1n(n+1)(1−p)1,极小值
φ(xm)=1−npn(1−p)1(n+1)n+1nn=1−n(np)n(1−p)1(n+1)n+11≤1−nnnp+⋯+np+1−p/(n+1)n+11(n+1)n+11=0
最后采用了均值不等式来放缩,当且仅当p=n+1n时取等,此时xm=1+n1.
借助均值不等式,不难发现1+n1≤xm以及φ(1+(1−p)pn)>0,φ(1+n1)≤0,因此方程φ(x)=0在(1,+∞)上有两个根, 它们分布在1+1/n的两侧, 其中一个是1/p。
φ(x)=0的最小模根是实根
证明留作习题 不是重点,不想啰嗦 贴一张n=8,p=0.6时φ(x)在复平面上的函数值作为参考吧~
实际上其它复根的模长不小于另一个实根(提示:使用三角不等式),因此为了使用亚纯估计定理,我们只需要考虑这个函数的实根就足够了。
(I) p=n+1n 时
Res[Qn(x);x0]=x→x0limφ′(x0)1−pnx0n=(n+1)(1−p)pnx0n−11−pnx0n
由亚纯估计定理可知:
P(Zm<n)=[xm]Qn(x)∼1−(n+1)(1−p)pnx0n1−pnx0n(x01)m+1=(1−p)(n+1−nx0)1−px0(x01)m+1(10a)
(II) p=n+1n 时
a−1=x→x0limφ(x)(1−pnxn)(x−x0)=−(n+1)(1−p)2=−2
a−2=x→x0limφ(x)(1−pnxn)(x−x0)2=n(n+1)(1−p)pnx0n−12(1−pnx0n)=0
因此,
P(Zm<n)=[xm]Qn(x)∼2(x01)m+1(10b)
估计极点x0
当n充分大时,总是有p<n+1n,这时1/p不是φ(x)=0最小的实根。记最小实根为x0. 注意到φ(1+(1−p)pn)>0和φ(1+e(1−p)pn)<0,结合前面的导数分析,我们有1+(1−p)pn<x0<1+e(1−p)pn,因此
x0=1+Θ((1−p)pn)
进一步,记K=n→∞lim(1−p)pnx0−1∈[1,e],则
K=n→∞lim(1−p)pnx0−1=n→∞limx0n+1≤n→∞lim[1+e(1−p)pn]n+1=exp(n→∞limln(1+e(1−p)pn)(n+1))≤exp(n→∞lime(1−p)pn(n+1))=exp(0)=1
因此,K=1,也就是说
x0∼1+(1−p)pn(n→∞)
将以上近似回代到(10a)中,有
P(Zm<n)∼(1−p)(n+1−nx0)1−px0(x01)m+1∼(x01)m+1=(1+(1−p)pn1)m+1=(1+p−n1−p)−(m+1)=((1+p−n1−p)p−n)−pn(m+1)∼(e1−p)−pn(m+1)=e(m+1)(p−1)pn
从而,
P(Zm≥n)=1−P(Zm<n)∼1−e(m+1)(p−1)pn(8)
e:又是我~
TODO: 误差分析
好麻烦欸,有空再整吧...(多半是鸽了)