zoukankan      html  css  js  c++  java
  • Finding Expected Value简易题解

    Finding Expected Value简易题解

    $Part1$

    先不考虑有 $-1$ 的情况

    我们可以将本题转化成这样一个模型。一共有$k$个人,每人手上有$x_i$个饼干,保证$sum x_i=n$。($k,n$同原题意)

    现在有如下操作:

    1.每次等概率随机一个人$i$,保证$i$手头上有饼干。

    2.再等概率随机一个人$j$,可以满足$i=j$。

    3.从$x_i$中任意拿出一个饼干,由$i$交予$j$。

    直到所有饼干归于某人,结束以上随机操作。

    求出期望操作次数。

    考虑记$E(i)$表示所有饼干都到$i$手上结束的期望次数,

    $P(i)$表示所有饼干都到$i$手上结束的概率,

    $E'(i)$表示所有饼干都到$i$手上才结束,且满足所有饼干在其他人手上时不结束的期望次数,

    $p(i,x)$表示操作$x$次,结束于$i$这个人的概率。

    显然有$displaystyle E(i)=sum_{x=0}{infty}x*p(i,x),P(i)=sum_{x=0}{infty}p(i,x),sum_{i=1}^kP(i)=1$.

    考虑所有饼干都在$j$手上时,全部转移给$i(i ot=j)$的期望步数,显然是一个常数,设为$C$

    那么有$displaystyle E(i)=E'(i)-sum_{j ot=i}(E(j)+P(j)*C)$.

    关于$E(j)+P(j)C$可以理解成所有饼干先给$j$在给$i$,期望步数为$displaystyle sum_{x=0}{infty}(x+C)*p(j,x)=sum_{x=0}{infty}xp(j,x)+Csum_{x=0}^{infty}p(j,x)=E(j)+P(j)*C$.

    $displaystyle E(i)=E'(i)-sum_{j ot=i}(E(j)+P(j)*C)$

    $Rightarrow$$displaystyle E'(i)=sum_{j=1}kE(j)+Csum_{j=1,j ot=i}kp(j)=ans+C(1-P(i))$

    $Rightarrow$$displaystyle sum_{i=1}^kE'(i)=k*ans+(k-1)C$

    $Rightarrow$$displaystyle ans=frac{sum_{i=1}^kE'(i)-(k-1)C}{k}$

    考虑$E'(i)$怎么算,显然至于初始饼干数$x_i$有关,

    设$f(x)$表示当前某人有$x$个,他能集齐$n$个的期望

    $ f(x)= egin{cases} frac{1}{k}f(x+1)+frac{k-1}{k}f(x )+1& x=0 frac{x}{n}(frac{k-1}{k}f(x-1)+frac{1}{k}f(x))+frac{n-x}{n}(frac{1}{k}f(x+1)+frac{k-1}{k}f(x))+1& 1 leq x leq n-1 0 &x=n end{cases} $

    记$f$的差分数组$g(x)=f(x)-f(x+1)$

    当$x=0$时,解得$g(0)=k$。

    当$x>0$时,设

    $Xg(x-1)+Yg(x)+Z$

    $=X(f(x-1)-f(x))+Y(f(x)-f(x+1))+Z$

    $=Xf(x-1)+(Y-X)f(x)-Yf(x+1)+Y=0$。

    根据$dp$方程,由待定系数法求得

    $egin{cases} X=frac{x(k-1)}{nk} Y=frac{x-n}{n} Z=1 end{cases}$

    于是便有$g$的递推式$g(x)=frac{x(k-1)g(x-1)+kn}{n-x}$,于是可以$O(n)$求$f(x)$。

    不难想到之前设的常数$C=f(0)$

    $displaystyle ans=frac{sum_{i=1}^kf(x_i)-(k-1)f(0)}{k}$

    $Part2$

    现在我们加上有$-1$的要求,无非就是在$P art1$的基础上求出$E(ans)$

    考虑期望的线性性$E(ans)=frac{sum_{i=1}^kE(f(x_i))-(k-1)f(0)}{k}$,$k,f(0)$均为常数。

    那么考虑$E(f(x))$怎么求。

    设有$cnt$个$-1$。

    对于第$i$个人已经有了$x_i$,再从$cnt$个$-1$取$j$个出来给$i$这个人,剩下的分配给别人。

    取出的$j$服从$B(cnt,frac{1}{k})$这样的二项分布,暴力展开求出$E(f(x))$

    $displaystyle E(f(x_i))=sum_{j=0}{cnt}f(x_i+j)C(cnt,j)(frac{1}{k})j(1-frac{1}{k})^{cnt-j}$,这样计算的复杂度为$O(n)$。

    注意到不同$x_i$大约有$sqrt{n}$个。可以记一个桶,对于相同的$x_ i$一起处理,求$E(f(x_i))$即可,复杂度为$O(nsqrt{n})$。

  • 相关阅读:
    DataGrid( 数据表格) 组件[2]
    DataGrid( 数据表格) 组件[1]
    Form( 表单) 组件
    Slider( 滑动条) 组件
    内存管理-常见内存泄露-(5)
    Android 内存管理分析(四)
    Android 之 内存管理-查看内存泄露(三)
    Android 内存管理(二)
    正确认识Android的内存管理机制,合理关闭进程 (一)
    谈谈Runtime类中的freeMemory,totalMemory,maxMemory等几个方法
  • 原文地址:https://www.cnblogs.com/Stump/p/15368011.html
Copyright © 2011-2022 走看看