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\not=j)\)的期望步数,显然是一个常数,设为\(C\)
那么有\(\displaystyle E(i)=E'(i)-\sum_{j\not=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}x*p(j,x)+C\sum_{x=0}^{\infty}p(j,x)=E(j)+P(j)*C\).
\(\displaystyle E(i)=E'(i)-\sum_{j\not=i}(E(j)+P(j)*C)\)
\(\Rightarrow\)\(\displaystyle E'(i)=\sum_{j=1}^kE(j)+C\sum_{j=1,j\not=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\)的差分数组\(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)+Z=0\)。
根据\(dp\)方程,由待定系数法求得
\(\begin{cases} X=\frac{x*(k-1)}{n*k} \\ 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(n\sqrt{n})\)。