腾讯笔试题2020 一个有意思的期望题

本文深入解析了一道腾讯笔试中的期望题,通过两种方法求解一根木棍被随机切割直至长度小于某阈值时的切割次数期望。第一种方法基于期望定义,第二种方法采用期望递推,最终得出简洁的数学表达式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

  • 今年腾讯笔试出了一个很有意思的期望题,正好覆盖了大学里大部分重要的数学基础知识,非常有意思,作为基础知识的复习,我把这个题的详细解法以及相应的基础知识整理了进来~
  • 如果基础知识比较简短,我会插在正文中,如果一段基础知识很长,我就放在后面的附录中~
  • ps. 作为面试题还挺合适的,准备改编改编,成为我司的面试题2333,所以名字就不起的太清楚了,大家看到算赚到吧~
  • pps. 附录和一些细节晚点更新

题目

  • 一根长为LLL的木棍, 给定常数0<d≤L0 \lt d \leq L0<dL
  • 重复以下动作: 随机砍木棍,将木棍分成左右两部分, 舍弃左边, 把右边部分作为新的木棍; 直到长度小于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)=xxp(x),或者连续情况下 E(x)=∫x∈定义域xp(x)dxE(x) = \int_{x \in 定义域} xp(x) dxE(x)=xxp(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)=nN+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)xU(a,b),也就是说xxx的概率密度函数p(x)=1b−ap(x) = \frac{1}{b - a}p(x)=ba1
  • 有了上述知识,我们就设第iii次切分后,还剩下棒子长xix_ixi
  • 举个简单例子,就是第一次切分还剩x1x_1x1长,这个x1∼U(0,L)x_1 \sim U(0, L)x1U(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)=xp(x),连续分布的话就是P(x)=∫x∈所选范围p(x)dxP(x) = \int_{x\in所选范围} p(x) dxP(x)=xp(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(x2x1)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(x2x1)p(x1)=x1L1
  • 我们进一步把这个形式推广到nnn次切分,根据题意,我们知道这个联合概率满足马尔科夫原则,也就是说第kkk次划分只和第k−1k-1k1次划分有关,也就是说,我们有如下形式:
    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(x2x1)p(x3x2)...p(xnxn1)=p(x1)i=1n1p(xi+1xi)=L1i=1n1xi1
  • 我们先看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∫0dlog⁡Lddx2=dLlog⁡Ld\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)=0ddLx1L1dx1dx2=L10dlogdLdx2=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)=0dxn11dxndxn2xn21dxn1...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)=0dxn11dxndxn2xn21dxn1...dLL1dx1=L10ddxndxn2xn11dxn1...dx1x21dx2dLx11dx1
  • 假设n=3n=3n=3,我们先看最后两项(其实和前面p(n=2)p(n=2)p(n=2)是类似的)
    ∫dx11x2dx2∫dL1x1dx1=∫dL1x1log⁡x1ddx1 \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} dx1x21dx2dLx11dx1=dLx11logdx1dx1
  • 这里我们顺便复习一下积分的基础知识,先是简单的积分换元,令t=x1dt = \frac{x_1}{d}t=dx1,则有x1=t⋅dx_1 = t \cdot dx1=td
    ∫dL1x1log⁡x1ddx1=∫1Ld1t⋅dlog⁡tdxdtdt. \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=1dLtd1logtdtdxdt.
  • 由于dxdt=d\frac{dx}{dt} = ddtdx=d,所以有:
    ∫1Ld1t⋅dlog⁡tdxdtdt=∫1Ld1t⋅dlog⁡(t)d  dt=∫1Ldlog⁡ttdt \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 1dLtd1logtdtdxdt=1dLtd1log(t)ddt=1dLtlogtdt
  • 这是个经典的积分,通过分步积分可以求解,我把推导写在这里,分步积分的介绍以及证明会放在后面的附录中。
    ∫log⁡t1tdt=log⁡2t−∫1tlog⁡tdt=>∫log⁡t1tdt=log⁡2t2 \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=log2tt1logtdt=2log2t
  • 这样上面的结果就是:
    ∫1Ldlog⁡ttdt=log⁡2Ld2 \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)=dLlog⁡2Ld2 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∫dL1x1log⁡2x1ddx1 \frac{1}{2} \int_d^L \frac{1}{x_1} \log^2 \frac{x_1}{d} dx_1 21dLx11log2dx1dx1
  • 这里需要用到一个小的性质
  • (知识点4)∫log⁡nxdx=log⁡n+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)=dLlog⁡n−1Ld(n−1)! p(n) = \frac{d}{L} \frac{\log^{n-1} \frac{L}{d}}{(n-1)!} p(n)=Ld(n1)!logn1dL

求解期望

  • 根据上面的结果期望为:
    E(n)=dL∑n∈N+n⋅log⁡n−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)=LdnN+n(n1)!logn1dL
  • 求解这个无穷级数,主要是要利用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=0n!xn+Rn(x)
  • 我们换个元,令x=log⁡Ldx = \log \frac{L}{d}x=logdL,就会发现形式基本上是一样的,最后得到结论:
    E(n)=1+log⁡Ld E(n) = 1 + \log \frac{L}{d} E(n)=1+logdL
  • 附上证明:
    E(n)=dL∑n=1∞n⋅log⁡n−1Ld(n−1)!=dL∑n=0∞(n+1)log⁡nLdn!=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)=dLelog⁡Ld(1+log⁡Ld)=1+log⁡Ld \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=1n(n1)!logn1dL=Ldn=0(n+1)n!logndL=Ldn=0(n+1)n!xn=Ldn=0n!xn+Ldn=0nn!xn=Ldex+Ldn=1x(n1)!xn1=Ldex+Ldxn=0n!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^-xd(左极限)是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)=0dLdy+d+LL1(f(y)+1)dy=Ld+L1(F(L)F(d)+Ld)=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)=log⁡L+C f(L) = \log L + C f(L)=logL+C
  • 根据初始条件f(d+)=1f(d^+) = 1f(d+)=1,我们有:
    f(d+)=log⁡d+C=1=>C=1−log⁡d f(d^+) = \log d + C = 1\\ => C = 1 - \log d f(d+)=logd+C=1=>C=1logd
  • 所以最后有:
    f(L)=1+log⁡Ld f(L) = 1+\log\frac{L}{d} f(L)=1+logdL
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值