前言
- 今年腾讯笔试出了一个很有意思的期望题,正好覆盖了大学里大部分重要的数学基础知识,非常有意思,作为基础知识的复习,我把这个题的详细解法以及相应的基础知识整理了进来~
- 如果基础知识比较简短,我会插在正文中,如果一段基础知识很长,我就放在后面的附录中~
- ps. 作为面试题还挺合适的,准备改编改编,成为我司的面试题2333,所以名字就不起的太清楚了,大家看到算赚到吧~
- pps. 附录和一些细节晚点更新
题目
- 一根长为LLL的木棍, 给定常数0<d≤L0 \lt d \leq L0<d≤L
- 重复以下动作: 随机砍木棍,将木棍分成左右两部分, 舍弃左边, 把右边部分作为新的木棍; 直到长度小于ddd
- 求砍的次数的期望;
确定期望的求解方式
- 一般来说,面试中的求期望题,无非是两种方案,一种是按照期望的定义进行求解,另一种是通过期望的递推求解(也就是期望dp,其理论基础是全期望公式);后者过去我见到的大多是解决离散问题,连续问题的话递推会形成积分方程,此题我沿着这个思路尝试了一下,发现其实也是可解的,甚至更简单,这会放在下下个section介绍。
解法1. 按期望定义求解
- 第一步就是定义随机变量
- 记随机变量nnn为,满足条件时,砍的次数,p(n)p(n)p(n)就是nnn次恰好完成任务的概率,n的取值范围很明显就是全体正整数
- (知识点1,期望定义)期望公式:E(x)=∑x∈定义域xp(x)E(x) = \sum_{x \in 定义域} xp(x)E(x)=∑x∈定义域xp(x),或者连续情况下 E(x)=∫x∈定义域xp(x)dxE(x) = \int_{x \in 定义域} xp(x) dxE(x)=∫x∈定义域xp(x)dx,注意下的是离散情况下p(x)p(x)p(x)是PMF(probability mass function,概率质量函数),连续的情况下则是PDF(probability density function,概率密度函数)。
- 好了,这样我们就知道了我们要求的期望是如何定义的了,即:
E(n)=∑n∈N+np(n) E(n) = \sum_{n \in N_+} np(n) E(n)=n∈N+∑np(n) - 很明显这是个无穷级数,它好不好求,我们得先看看p(n)p(n)p(n)
求解p(n)p(n)p(n)
- 这个p(n)p(n)p(n)直接求解是有一定困难的,我们要借助一下题干中告诉我们的其他分布知识了
- 我们知道每次切分是随机的,翻译过来就是切分点的选择满足均匀分布
- (知识点2,均匀分布)随机变量xxx服从均匀分布记作x∼U(a,b)x \sim U(a, b)x∼U(a,b),也就是说xxx的概率密度函数p(x)=1b−ap(x) = \frac{1}{b - a}p(x)=b−a1
- 有了上述知识,我们就设第iii次切分后,还剩下棒子长xix_ixi
- 举个简单例子,就是第一次切分还剩x1x_1x1长,这个x1∼U(0,L)x_1 \sim U(0, L)x1∼U(0,L),所以p(x1)=1Lp(x_1) = \frac{1}{L}p(x1)=L1。
- (知识点3,累积概率分布CMF):累计概率表示的是随机变量落在一定范围内的概率,离散分布的话就是P(x)=∑x∈所选范围p(x)P(x) = \sum_{x\in所选范围} p(x)P(x)=∑x∈所选范围p(x),连续分布的话就是P(x)=∫x∈所选范围p(x)dxP(x) = \int_{x\in所选范围} p(x) dxP(x)=∫x∈所选范围p(x)dx
- 所以对应的第一次就成功的概率就是
p(n=1)=P(x1<d)=∫0d1Ldx=dL p(n = 1) = P(x_1 < d) = \int_{0}^d \frac{1}{L} dx = \frac{d}{L} p(n=1)=P(x1<d)=∫0dL1dx=Ld - 第一次的相对简单,第二次成功的概率就要稍微复杂一点了,我们需要考虑多次切分的联合概率: p(x1,x2,...)p(x_1, x_2, ...)p(x1,x2,...)
- 我们先以两次的为例,后面的自然就能推导出来。
- 直接推导有些难度,我们根据贝叶斯公式展开一下就比较简单了,因为p(x2∣x1)∼U(0,x1)p(x_2 | x_1) \sim U(0, x_1)p(x2∣x1)∼U(0,x1),所以有
p(x1,x2)=p(x2∣x1)p(x1)=1x1L p(x_1, x_2) = p(x_2 | x_1)p(x_1)\\ = \frac{1}{x_1L} p(x1,x2)=p(x2∣x1)p(x1)=x1L1 - 我们进一步把这个形式推广到nnn次切分,根据题意,我们知道这个联合概率满足马尔科夫原则,也就是说第kkk次划分只和第k−1k-1k−1次划分有关,也就是说,我们有如下形式:
p(x1,x2,x3,...,xn)=p(x1)p(x2∣x1)p(x3∣x2)...p(xn∣xn−1)=p(x1)∏i=1n−1p(xi+1∣xi)=1L∏i=1n−11xi \begin{aligned} p(x_1, x_2, x_3, ..., x_n) &= p(x_1)p(x_2 | x_1) p(x_3 | x_2)...p(x_n|x_{n-1})\\ &= p(x_1) \prod_{i=1}^{n-1} p(x_{i+1} | x_i)\\ &= \frac{1}{L} \prod_{i=1}^{n-1} \frac{1}{x_i} \end{aligned} p(x1,x2,x3,...,xn)=p(x1)p(x2∣x1)p(x3∣x2)...p(xn∣xn−1)=p(x1)i=1∏n−1p(xi+1∣xi)=L1i=1∏n−1xi1 - 我们先看p(n=2)p(n=2)p(n=2)的求法,我们要求的是P(x1>d,x2<d)P(x_1 > d, x_2 < d)P(x1>d,x2<d),具体求解为:
p(n=2)=P(x1>d,x2<d)=∫0d∫dL1x1Ldx1dx2=1L∫0dlogLddx2=dLlogLd\begin{aligned} p(n=2) &= P(x_1 > d, x_2 < d)\\ &= \int_0^d\int_d^L \frac{1}{x_1L} d x_1 d x_2 \\ &= \frac{1}{L} \int_0^d \log \frac{L}{d} d x_2 \\ &= \frac{d}{L} \log \frac{L}{d} \end{aligned}p(n=2)=P(x1>d,x2<d)=∫0d∫dLx1L1dx1dx2=L1∫0dlogdLdx2=LdlogdL - 接下来就是一个小难点了,我们要把切分n次的联合概率带进来了,以便求出所有的p(n)p(n)p(n)
p(n)=P(d<x1<L,d<x2<x1,d<x3<x2,....,0<xn<d)=∫0d1xn−1dxn∫dxn−21xn−2dxn−1...∫dL1Ldx1 \begin{aligned} p(n) &= P(d < x_1 < L, d < x_2 < x_1, d < x_3 < x_2, ...., 0 < x_n < d) \\ &= \int_0^d \frac{1}{x_{n-1}} dx_{n}\int_d^{x_{n-2}} \frac{1}{x_{n-2}} dx_{n-1} ... \int_d^L \frac{1}{L} dx_{1} \end{aligned} p(n)=P(d<x1<L,d<x2<x1,d<x3<x2,....,0<xn<d)=∫0dxn−11dxn∫dxn−2xn−21dxn−1...∫dLL1dx1 - 看到这里先别害怕一步一步展开就能发现规律了,首先我们换换函数的顺序,把对应的变量和对应的积分部分联系起来
p(n)=∫0d1xn−1dxn∫dxn−21xn−2dxn−1...∫dL1Ldx1=1L∫0ddxn∫dxn−21xn−1dxn−1...∫dx11x2dx2∫dL1x1dx1 \begin{aligned} p(n) &= \int_0^d \frac{1}{x_{n-1}} dx_{n}\int_d^{x_{n-2}} \frac{1}{x_{n-2}} dx_{n-1} ... \int_d^L \frac{1}{L} dx_{1}\\ &= \frac{1}{L} \int_0^d dx_{n}\int_d^{x_{n-2}} \frac{1}{x_{n-1}} dx_{n-1} ... \int_d^{x_1} \frac{1}{x_2}dx_2 \int_d^L \frac{1}{x_1} dx_1\\ \end{aligned} p(n)=∫0dxn−11dxn∫dxn−2xn−21dxn−1...∫dLL1dx1=L1∫0ddxn∫dxn−2xn−11dxn−1...∫dx1x21dx2∫dLx11dx1 - 假设n=3n=3n=3,我们先看最后两项(其实和前面p(n=2)p(n=2)p(n=2)是类似的)
∫dx11x2dx2∫dL1x1dx1=∫dL1x1logx1ddx1 \begin{aligned} \int_d^{x_1} \frac{1}{x_2}dx_2 \int_d^L \frac{1}{x_1} dx_1 &= \int_d^L \frac{1}{x_1} \log \frac{x_1}{d} d x_1 \\ \end{aligned} ∫dx1x21dx2∫dLx11dx1=∫dLx11logdx1dx1 - 这里我们顺便复习一下积分的基础知识,先是简单的积分换元,令t=x1dt = \frac{x_1}{d}t=dx1,则有x1=t⋅dx_1 = t \cdot dx1=t⋅d
∫dL1x1logx1ddx1=∫1Ld1t⋅dlogtdxdtdt. \int_d^L \frac{1}{x_1} \log \frac{x_1}{d} d x_1 = \int_1^{\frac{L}{d}} \frac{1}{t \cdot d} \log t \frac{dx}{dt} dt. ∫dLx11logdx1dx1=∫1dLt⋅d1logtdtdxdt. - 由于dxdt=d\frac{dx}{dt} = ddtdx=d,所以有:
∫1Ld1t⋅dlogtdxdtdt=∫1Ld1t⋅dlog(t)d dt=∫1Ldlogttdt \int_1^{\frac{L}{d}} \frac{1}{t \cdot d} \log t \frac{dx}{dt} dt = \int_1^{\frac{L}{d}} \frac{1}{t \cdot d} \log (t) d \; dt = \int_1^{\frac{L}{d}} \frac{\log t}{t} dt ∫1dLt⋅d1logtdtdxdt=∫1dLt⋅d1log(t)ddt=∫1dLtlogtdt - 这是个经典的积分,通过分步积分可以求解,我把推导写在这里,分步积分的介绍以及证明会放在后面的附录中。
∫logt1tdt=log2t−∫1tlogtdt=>∫logt1tdt=log2t2 \begin{aligned} \int \log t \frac{1}{t} dt &= \log^2 t - \int \frac{1}{t} \log t dt\\ => \int \log t \frac{1}{t} dt &= \frac{\log^2 t }{2} \\ \end{aligned} ∫logtt1dt=>∫logtt1dt=log2t−∫t1logtdt=2log2t - 这样上面的结果就是:
∫1Ldlogttdt=log2Ld2 \int_1^{\frac{L}{d}} \frac{\log t}{t} dt = \frac{\log^2 \frac{L}{d}}{2} ∫1dLtlogtdt=2log2dL - 所以p(n=3)p(n=3)p(n=3)的结果如下:
p(n=3)=dLlog2Ld2 p(n=3) = \frac{d}{L} \frac{\log^2 \frac{L}{d}}{2} p(n=3)=Ld2log2dL - 类似的,当计算p(n=4)p(n=4)p(n=4)的时候,最后会需要求积分:
12∫dL1x1log2x1ddx1 \frac{1}{2} \int_d^L \frac{1}{x_1} \log^2 \frac{x_1}{d} dx_1 21∫dLx11log2dx1dx1 - 这里需要用到一个小的性质
- (知识点4)∫lognxdx=logn+1xn+1\int \frac{\log^n}{x} dx = \frac{\log^{n+1}x}{n+1}∫xlogndx=n+1logn+1x,证明和上述推导类似,也会放在附录中。
- 最后结合这一结论,我们很容易得到p(n)p(n)p(n)的结果
p(n)=dLlogn−1Ld(n−1)! p(n) = \frac{d}{L} \frac{\log^{n-1} \frac{L}{d}}{(n-1)!} p(n)=Ld(n−1)!logn−1dL
求解期望
- 根据上面的结果期望为:
E(n)=dL∑n∈N+n⋅logn−1Ld(n−1)! E(n) = \frac{d}{L} \sum_{n \in N_+} n \cdot \frac{\log^{n-1} \frac{L}{d}}{(n-1)!} E(n)=Ldn∈N+∑n⋅(n−1)!logn−1dL - 求解这个无穷级数,主要是要利用exe^xex在原点处的泰勒展开式
- (知识点5)exe^xex在原点处的泰勒展开式:
ex=∑n=0∞xnn!+Rn(x) e^x = \sum_{n=0}^\infty \frac{x^n}{n!} + Rn(x) ex=n=0∑∞n!xn+Rn(x) - 我们换个元,令x=logLdx = \log \frac{L}{d}x=logdL,就会发现形式基本上是一样的,最后得到结论:
E(n)=1+logLd E(n) = 1 + \log \frac{L}{d} E(n)=1+logdL - 附上证明:
E(n)=dL∑n=1∞n⋅logn−1Ld(n−1)!=dL∑n=0∞(n+1)lognLdn!=dL∑n=0∞(n+1)xnn!=dL∑n=0∞xnn!+dL∑n=0∞n⋅xnn!=dLex+dL∑n=1∞x⋅xn−1(n−1)!=dLex+dLx∑n=0∞xnn!=dLex+dLxex=dLex(1+x)=dLelogLd(1+logLd)=1+logLd \begin{aligned} E(n) &= \frac{d}{L} \sum_{n = 1}^\infty n \cdot \frac{\log^{n-1} \frac{L}{d}}{(n-1)!} \\ & = \frac{d}{L} \sum_{n=0}^\infty (n + 1) \frac{\log^{n} \frac{L}{d}}{n!} \\ & = \frac{d}{L} \sum_{n=0}^\infty (n + 1) \frac{x^n}{n!}\\ &= \frac{d}{L} \sum_{n=0}^\infty \frac{x^n}{n!} + \frac{d}{L} \sum_{n=0}^\infty n \cdot \frac{x^n}{n!} \\ &= \frac{d}{L} e^x + \frac{d}{L} \sum_{n=1}^\infty x \cdot \frac{x^{n-1}}{(n-1) !}\\ &= \frac{d}{L} e^x + \frac{d}{L} x \sum_{n=0}^\infty \frac{x^{n}}{n!} \\ &= \frac{d}{L} e^x + \frac{d}{L} x e^x \\ &= \frac{d}{L} e^x (1 + x) \\ &= \frac{d}{L} e^{\log \frac{L}{d}} (1 + \log \frac{L}{d}) \\ &= 1 + \log \frac{L}{d} \end{aligned} E(n)=Ldn=1∑∞n⋅(n−1)!logn−1dL=Ldn=0∑∞(n+1)n!logndL=Ldn=0∑∞(n+1)n!xn=Ldn=0∑∞n!xn+Ldn=0∑∞n⋅n!xn=Ldex+Ldn=1∑∞x⋅(n−1)!xn−1=Ldex+Ldxn=0∑∞n!xn=Ldex+Ldxex=Ldex(1+x)=LdelogdL(1+logdL)=1+logdL
解法2. 按期望递推求解
- 我们首先定义状态,状态是棒子的长度,因此可以定义f(x)f(x)f(x)表示在棒子还剩长度为xxx的前提下的要满足条件的期望切分次数
- 递推公式也不难定义,下一次等概率的在(0,x)(0, x)(0,x)范围内选择切分位置,如果还剩下yyy长,则还剩下的期望次数是f(y)+1f(y) + 1f(y)+1:
f(x)=∫0x1x(f(y)+1)dy f(x) = \int_0^x \frac{1}{x} (f(y) + 1)dy f(x)=∫0xx1(f(y)+1)dy - 因为我们要求的是f(L)f(L)f(L),我们就直接带进来,结果为:
f(L)=∫0L1L(f(y)+1)dy f(L) = \int_0^L \frac{1}{L} (f(y) + 1)dy f(L)=∫0LL1(f(y)+1)dy - 根据题意,我们简单分析下f(x)f(x)f(x),x<dx<dx<d的时候,明显f(x)=0f(x) = 0f(x)=0,而x>dx>dx>d的时候,很明显f(x)f(x)f(x)至少为1,因为至少会切一次,因此x=dx=dx=d的位置f(x)f(x)f(x)就是不连续的了(因为x→d−x \rightarrow d^-x→d−(左极限)是0,而右极限是1)。
- 因此上式我们可以拆分下积分范围,把为0的部分单拿出来,注意下界我们取在ddd的右极限:
f(L)=∫0d−dyL+∫d+L1L(f(y)+1)dy=dL+1L(F(L)−F(d)+L−d)=>Lf(L)=F(L)−F(d)+L \begin{aligned} f(L) &= \int_0^{d^-} \frac{dy}{L} + \int_{d^+}^L \frac{1}{L} (f(y) + 1)dy\\ &= \frac{d}{L} + \frac{1}{L} (F(L) - F(d) + L - d)\\ => Lf(L) &= F(L) - F(d) + L \end{aligned} f(L)=>Lf(L)=∫0d−Ldy+∫d+LL1(f(y)+1)dy=Ld+L1(F(L)−F(d)+L−d)=F(L)−F(d)+L - 其中F(⋅)F(\cdot)F(⋅)是f(⋅)f(\cdot)f(⋅)的原函数。我们两边一起对L求导,就有
Lf′(L)+f(L)=f(L)+1=>f′(L)=1L Lf'(L) + f(L) = f(L) + 1\\ => f'(L) = \frac{1}{L} Lf′(L)+f(L)=f(L)+1=>f′(L)=L1 - 求个不定积分就有
f(L)=logL+C f(L) = \log L + C f(L)=logL+C - 根据初始条件f(d+)=1f(d^+) = 1f(d+)=1,我们有:
f(d+)=logd+C=1=>C=1−logd f(d^+) = \log d + C = 1\\ => C = 1 - \log d f(d+)=logd+C=1=>C=1−logd - 所以最后有:
f(L)=1+logLd f(L) = 1+\log\frac{L}{d} f(L)=1+logdL