本文是三国杀中的概率学问题系列文章中的一篇,将详细讨论王荣吉占的期望摸牌数问题。并加上连续情形作为拓展。
值得说明的是,本文的思路受到了一篇文章的启发,在此特别鸣谢,这是文章的链接。
王荣的二技能吉占很有意思,展示牌堆顶的一张牌,然后猜测下一张牌比这张牌大还是比这张牌小,猜对了就继续猜,直到猜错为止,然后最终可以获得展示的所有牌。所以即便第一次就猜错,也能拿到2张牌(第一张展示的牌,和猜错的这张牌)。为了能够摸更多的牌,我们需要采取贪心的猜牌策略,保证自己这次猜对的概率最大。也就是说,在展示的牌为1-6时,我们选择猜大,8-13时猜小,7的时候由于猜大和猜小的概率一样,所以猜大猜小都可以。
为了使得模型更一般化,将13种不同的点数改为n种不同的点数。那么问题可以重新描述如下:
问题:牌有1~n这n种点数,我们先亮出第一张牌,然后猜测下一张牌跟这一张牌的大小关系,然后亮出下一张牌,若猜对则继续猜,猜错就停止。求在最优策略下平均能亮出几张牌。
由于牌堆为理想牌堆,不管怎么拿牌,每种点数的牌的张数都是一样的,所以最优策略即为:若当前牌的点数小于等于 n + 1 2 \frac{n+1}{2} 2n+1,就猜大,否则猜小。
我们令 f ( x ) f(x) f(x)表示当前牌的点数为 x x x时,后面会亮出的牌数的数学期望。那么,我们可以得到下面的公式:
f ( x ) = { ∑ i = x + 1 n 1 n f ( i ) + 1 0 ≤ x ≤ n + 1 2 ∑ i = 1 x − 1 1 n f ( i ) + 1 n + 1 2 < x ≤ 1 f(x)=\begin{cases} \sum_{i=x+1}^n{\frac{1}{n}f(i)+1} &0\leq x\leq\frac{n+1}{2} \\ \sum_{i=1}^{x-1}{\frac{1}{n}f(i)+1} & \frac{n+1}{2}
解释一下这个公式,当前牌的点数为 x x x时,首先会亮出下一张牌,这是+1的含义。然后下一张牌是每个点数的概率都是 1 n \frac{1}{n} n1,把猜对了能亮出的牌数乘以概率累加起来,就是猜对了之后期望亮出的牌数。分成两段也仅仅是因为猜测策略的原因。
我们要求的是平均能亮出几张牌,假设这个数量为 E E E,那么 E = 1 n ∑ i = 1 n f ( i ) + 1 E=\frac{1}{n}\sum_{i=1}^n{f(i)}+1 E=n1∑i=1nf(i)+1
首先先亮出一张牌,然后这张牌的点数有n种可能性,即有 1 n \frac{1}{n} n1的概率为i。如果第一张牌是i的话,则期望亮出的牌数就是 f ( i ) f(i) f(i)。于是我们把概率乘以亮出牌数累加起来,就是接下来会亮出的牌数,即 1 n ∑ i = 1 n f ( i ) \frac{1}{n}\sum_{i=1}^n{f(i)} n1∑i=1nf(i)。再加上第一张亮出的牌,就是 1 n ∑ i = 1 n f ( i ) + 1 \frac{1}{n}\sum_{i=1}^n{f(i)}+1 n1∑i=1nf(i)+1了。 E E E就是我们想求的答案。
接下来我们来算出 f ( x ) f(x) f(x)的具体值。
我们设出 f ( x ) f(x) f(x)的前缀和。令 F ( x ) = ∑ i = 1 n f ( i ) F(x)=\sum_{i=1}^n{f(i)} F(x)=∑i=1nf(i)
当 n + 1 2 < x ≤ 1 \frac{n+1}{2}
f ( x ) = 1 n F ( x − 1 ) + 1 f(x)=\frac{1}{n}F(x-1)+1 f(x)=n1F(x−1)+1
F ( x − 1 ) = n f ( x ) + n F(x-1)=nf(x)+n F(x−1)=nf(x)+n
将 x + 1 x+1 x+1代入 x x x得:
F ( x ) = n f ( x + 1 ) + n F(x)=nf(x+1)+n F(x)=nf(x+1)+n
两式相减得:
f ( x ) = n f ( x + 1 ) − n f ( x ) f(x)=nf(x+1)-nf(x) f(x)=nf(x+1)−nf(x)
于是得到了 f ( x ) f(x) f(x)的递推式
f ( x + 1 ) = n + 1 n f ( x ) f(x+1)=\frac{n+1}{n}f(x) f(x+1)=nn+1f(x)
由于 n n n为常数,于是我们发现在 n + 1 2 < x ≤ 1 \frac{n+1}{2}
类似地,在 0 ≤ x ≤ n + 1 2 0\leq x\leq\frac{n+1}{2} 0≤x≤2n+1上求得 f ( x + 1 ) = n n + 1 f ( x ) f(x+1)=\frac{n}{n+1}f(x) f(x+1)=n+1nf(x)
可以发现, f ( x ) f(x) f(x)是一列以 n + 1 2 \frac{n+1}{2} 2n+1为对称轴,先递减,后递增的两段等比数列,公比分别为 n n + 1 \frac{n}{n+1} n+1n和 n + 1 n \frac{n+1}{n} nn+1。
等比数列的求和公式为 S = a 1 ∗ q n − 1 q − 1 S=a_1*\frac{q^n-1}{q-1} S=a1∗q−1qn−1,现在公比已经知道了,所以要求首项。 f ( n + 1 2 ) f(\frac{n+1}{2}) f(2n+1)位于两段的连接处,可以让它作为两段等比数列的首项。现在我们来求 f ( n + 1 2 ) f(\frac{n+1}{2}) f(2n+1)。
我们不妨假设 n n n为奇数,这样 x = n + 1 2 x=\frac{n+1}{2} x=2n+1在公式的两段上都可以成立。于是有
f ( n + 1 2 ) = ∑ i = n + 3 2 n 1 n f ( i ) + 1 = ∑ i = 1 n − 1 2 1 n f ( i ) + 1 f(\frac{n+1}{2})=\sum_{i=\frac{n+3}{2}}^n{\frac{1}{n}f(i)+1}=\sum_{i=1}^{\frac{n-1}{2}}{\frac{1}{n}f(i)+1} f(2n+1)=∑i=2n+3nn1f(i)+1=∑i=12n−1n1f(i)+1
( 2 + 1 n ) f ( n + 1 2 ) = 1 n F ( n ) + 2 (2+\frac{1}{n})f(\frac{n+1}{2})=\frac{1}{n}F(n)+2 (2+n1)f(2n+1)=n1F(n)+2
f ( n + 1 2 ) = 1 2 n + 1 F ( n ) + 2 n 2 n + 1 f(\frac{n+1}{2})=\frac{1}{2n+1}F(n)+\frac{2n}{2n+1} f(2n+1)=2n+11F(n)+2n+12n
利用 f ( x ) f(x) f(x)的对称性,以及等比数列求和公式,有
F ( n ) = ∑ i = 1 n − 1 2 f ( i ) + ∑ i = n + 1 2 n f ( i ) = ∑ i = n + 3 2 n f ( i ) + ∑ i = n + 1 2 n f ( i ) = n + 1 n f ( n + 1 2 ) ( n + 1 n ) n − 1 2 − 1 n + 1 n − 1 + f ( n + 1 2 ) ( n + 1 n ) n + 1 2 − 1 n + 1 n − 1 = [ 2 n ( n + 1 n ) n + 1 2 − 2 n − 1 ] f ( n + 1 2 ) F(n)=\sum_{i=1}^{\frac{n-1}{2}}{f(i)}+\sum_{i=\frac{n+1}{2}}^n{f(i)}=\sum_{i=\frac{n+3}{2}}^n{f(i)}+\sum_{i=\frac{n+1}{2}}^n{f(i)}=\frac{n+1}{n}f(\frac{n+1}{2})\frac{(\frac{n+1}{n})^{\frac{n-1}{2}}-1}{\frac{n+1}{n}-1}+f(\frac{n+1}{2})\frac{(\frac{n+1}{n})^{\frac{n+1}{2}}-1}{\frac{n+1}{n}-1}=[2n(\frac{n+1}{n})^{\frac{n+1}{2}}-2n-1]f(\frac{n+1}{2}) F(n)=∑i=12n−1f(i)+∑i=2n+1nf(i)=∑i=2n+3nf(i)+∑i=2n+1nf(i)=nn+1f(2n+1)nn+1−1(nn+1)2n−1−1+f(2n+1)nn+1−1(nn+1)2n+1−1=[2n(nn+1)2n+1−2n−1]f(2n+1)
联立两式
{ f ( n + 1 2 ) = 1 2 n + 1 F ( n ) + 2 n 2 n + 1 F ( n ) = [ 2 n ( n + 1 n ) n + 1 2 − 2 n − 1 ] f ( n + 1 2 ) \begin{cases} f(\frac{n+1}{2})=\frac{1}{2n+1}F(n)+\frac{2n}{2n+1}\\ F(n)=[2n(\frac{n+1}{n})^{\frac{n+1}{2}}-2n-1]f(\frac{n+1}{2}) \end{cases} {f(2n+1)=2n+11F(n)+2n+12nF(n)=[2n(nn+1)2n+1−2n−1]f(2n+1)
解得
{ f ( n + 1 2 ) = n 2 n + 1 − n ( n + 1 n ) n + 1 2 F ( n ) = n [ 2 n 2 n + 1 ( n + 1 n ) n + 1 2 − 1 ] 1 − n 2 n + 1 ( n + 1 n ) n + 1 2 \begin{cases} f(\frac{n+1}{2})=\frac{n}{2n+1-n(\frac{n+1}{n})^{\frac{n+1}{2}}}\\ F(n)=\frac{n[\frac{2n}{2n+1}(\frac{n+1}{n})^{\frac{n+1}{2}}-1]}{1-\frac{n}{2n+1}(\frac{n+1}{n})^{\frac{n+1}{2}}} \end{cases} ⎩ ⎨ ⎧f(2n+1)=2n+1−n(nn+1)2n+1nF(n)=1−2n+1n(nn+1)2n+1n[2n+12n(nn+1)2n+1−1]
于是,可以得到
E = ∑ i = 1 n 1 n f ( i ) + 1 = 1 n F ( n ) + 1 = 1 2 n + 1 n ( n n + 1 ) n + 1 2 − 1 E=\sum_{i=1}^{n}\frac{1}{n}f(i)+1=\frac{1}{n}F(n)+1=\frac{1}{\frac{2n+1}{n}(\frac{n}{n+1})^\frac{n+1}{2}-1} E=∑i=1nn1f(i)+1=n1F(n)+1=n2n+1(n+1n)2n+1−11
当 n = 13 n=13 n=13时, E ≈ 4.232 E\approx4.232 E≈4.232
当 n → ∞ n\to\infty n→∞时, l i m n → ∞ E = l i m n → ∞ 1 2 ( 1 − 1 n + 1 ) n + 1 2 − 1 = 1 2 e − 1 2 − 1 ≈ 4.69 lim_{n\to\infty}E=lim_{n\to\infty}\frac{1}{2(1-\frac{1}{n+1})^{\frac{n+1}{2}}-1}=\frac{1}{2e^{-\frac{1}{2}}-1}\approx4.69 limn→∞E=limn→∞2(1−n+11)2n+1−11=2e−21−11≈4.69
至此,原题就解出来了。
我们再做一点点扩展,看看在 n n n趋于无穷时的情况。现在我们把问题转化为连续的情况。
问题:在[0,1]区间上的均匀分布总体进行依次采样,约定若采样得到的随机数小于 1 2 \frac{1}{2} 21,则猜测下一次采得的随机数会更大;若采样得到的随机数大于 1 2 \frac{1}{2} 21,则猜测下一次采得的随机数会更小。若猜测正确,则继续猜;若猜测错误,则采样终止。求采样次数的数学期望。
设 f ( x ) f(x) f(x)表示当前点为 x x x时,继续猜测的次数。给出 f ( x ) f(x) f(x)的表达式如下:
f ( x ) = { ∫ x 1 f ( t ) d t + 1 0 ≤ x ≤ 1 2 ∫ 0 x f ( t ) d t + 1 1 2 < x ≤ 1 f(x)=\begin{cases} \int_x^1{f(t)dt}+1 &0\leq x\leq\frac{1}{2} \\ \int_0^x{f(t)dt}+1 & \frac{1}{2}
值得说明的是, x = 1 2 x=\frac{1}{2} x=21的情况对于两个公式都成立。这个式子是怎么得出来的呢?现在的点是 x x x,我们先要按上述规则进行一次猜测(这是+1的含义)。如果猜错了,我们就失去了继续猜测的机会。如果猜对了,那么我们可以继续猜测。假设下一个点是 t t t,这样的概率为 d t dt dt,继续猜测的次数为 f ( t ) f(t) f(t)。这样做一个积分(可以理解为加权平均)就能得到 f ( x ) f(x) f(x)的表达式了。
假设 E E E为采样次数的数学期望,那么 E = ∫ 0 1 f ( t ) d t + 1 E=\int_0^1{f(t)dt}+1 E=∫01f(t)dt+1
这个式子的含义是,先随机出现一个点(这是+1的含义),再按照这个点的值进行加权平均(也就是积分的含义)。
E E E就是在连续情形下,王荣的摸牌数。
接下来,我们开始解这个函数。
首先,发现一个很简单的事实, f ( 0 ) = f ( 1 ) = E f(0)=f(1)=E f(0)=f(1)=E
显然,这个函数关于 x = 1 2 x=\frac{1}{2} x=21是对称的。那么,我们来求一下 f ( 1 2 ) f(\frac{1}{2}) f(21)的值。
f ( 1 2 ) = ∫ 1 2 1 f ( t ) d t + 1 = ∫ 0 1 2 f ( t ) d t + 1 f(\frac{1}{2})=\int_\frac{1}{2}^1{f(t)dt}+1=\int_0^\frac{1}{2}{f(t)dt}+1 f(21)=∫211f(t)dt+1=∫021f(t)dt+1
2 f ( 1 2 ) = ∫ 0 1 f ( t ) d t + 2 = E + 2 2f(\frac{1}{2})=\int_0^1{f(t)dt}+2=E+2 2f(21)=∫01f(t)dt+2=E+2
f ( 1 2 ) = 1 2 E + 1 2 f(\frac{1}{2})=\frac{1}{2}E+\frac{1}{2} f(21)=21E+21
当 0 ≤ x ≤ 1 2 0\leq x\leq \frac{1}{2} 0≤x≤21时,我们对 f ( x ) = ∫ x 1 f ( t ) d t + 1 f(x)=\int_x^1{f(t)dt}+1 f(x)=∫x1f(t)dt+1两边求导,得
f ′ = − f f'=-f f′=−f
这是一个比较简单的常微分方程,接下来需要一点点常微分方程的知识。
d f d x = − f \frac{df}{dx}=-f dxdf=−f
d f f = − d x \frac{df}{f}=-dx fdf=−dx
d l n f = − d x dlnf=-dx dlnf=−dx
l n f = − x + C 1 lnf=-x+C_1 lnf=−x+C1
f = e − x + C 1 = C e − x f=e^{-x+C_1}=Ce^{-x} f=e−x+C1=Ce−x
于是我们解得 f = C e − x f=Ce^{-x} f=Ce−x
代入 x = 0 x=0 x=0和 x = 1 2 x=\frac{1}{2} x=21得
{ C e 0 = E C e − 1 2 = 1 2 E + 1 2 \begin{cases} Ce^0=E \\ Ce^{-\frac{1}{2}}=\frac{1}{2}E+\frac{1}{2} \end{cases} {Ce0=ECe−21=21E+21
解得 C = E = 1 2 e − 1 2 − 1 C=E=\frac{1}{2e^{-\frac{1}{2}}-1} C=E=2e−21−11
于是得到,当 0 ≤ x ≤ 1 2 0\leq x\leq \frac{1}{2} 0≤x≤21时, f ( x ) = e − x 2 e − 1 2 − 1 f(x)=\frac{e^{-x}}{2e^{-\frac{1}{2}}-1} f(x)=2e−21−1e−x
由于 f ( x ) f(x) f(x)关于 x = 1 2 x=\frac{1}{2} x=21对称,可对称地写出 1 2 < x ≤ 1 \frac{1}{2}
f ( x ) = { e − x 2 e − 1 2 − 1 0 ≤ x ≤ 1 2 e x − 1 2 e − 1 2 − 1 1 2 < x ≤ 1 f(x)=\begin{cases} \frac{e^{-x}}{2e^{-\frac{1}{2}}-1} &0\leq x\leq\frac{1}{2} \\ \frac{e^{x-1}}{2e^{-\frac{1}{2}}-1} & \frac{1}{2}
E = 1 2 e − 1 2 − 1 ≈ 4.69 E=\frac{1}{2e^{-\frac{1}{2}}-1}\approx4.69 E=2e−21−11≈4.69即为我们所求的答案。
可以发现,连续情形就是离散情形在 n → ∞ n\to\infty n→∞时的情况。而指数函数在离散情形下对应的其实就是等比数列。
本文先将问题作为离散情形进行处理,将问题中的n=13推广到了n为任意奇数的情况(偶数情形略有不同,也可以做,但是没有什么意义,笔者就没有单独列出了)。并且将问题推广到了 n n n为 + ∞ +\infty +∞的情形,即连续情形。从而彻底解出了王荣吉占背后的数学模型。