期望dp
数学期望是指离散型随机变量的平均值。即考虑所有情况结果的平均值,它等于每种情况的概率与该情况下的结果的乘积之和。
比如一枚硬币,有正反两面,丢出正面或反面的概率相等,请问丢出正面的期望次数。
直觉告诉我们,需要丢两次。因为丢出正面的概率为12\frac{1}{2}21,所以,需要丢出两次。
这是最简单的情形。
又比如掷一颗骰子,骰子有6个面,出现每个面的概率相等,请问丢出1的期望次数。
显然,直觉告诉我们,需要丢出6次。因为丢出1的概率是16\frac{1}{6}61.
是不是期望次数就是概率的倒数呢?
独立随机试验下,首次出现某个事件的期望试验次数等于出现该事件的概率的倒数。
而期望并不仅仅指事件,也可以是针对其他变量的期望。期望,就是我们要求的值在所有情况下的平均值。比如,丢一枚硬币,正反面等概率出现,如果丢出正面,你得到1元,如果丢出反面,你得到0元。请问你丢一次期望多少元?
那么答案是0.5元。12∗1+12∗0=0.5\frac{1}{2}*1+\frac{1}{2}*0=0.521∗1+21∗0=0.5
在大多数情况下,期望都应该用其定义式或递推方程来计算。
我们来看如何用期望的定义来计算以上最简单的情形。
例1
丢一枚硬币,出现正面的期望次数。
分析:
统计所有情况下花掉的次数。第一次就丢出正面,花费1次;第二次才丢出正面,花费2次;第三次丢出正面,花费3次,…\dots…
g=12∗1+14∗2+⋯+i2i(1)g=\frac{1}{2}*1+\frac{1}{4}*2+\dots+\frac{i}{2^i} \tag{1}g=21∗1+41∗2+⋯+2ii(1)
2∗g=1+1+34+⋯+i2i−1(2)2*g=1+1+\frac{3}{4}+\dots+\frac{i}{2^{i-1}} \tag{2}2∗g=1+1+43+⋯+2i−1i(2)
(2)-(1),可得:
12g=1+12+14+⋯+12i−1=1\frac{1}{2}g=1+\frac{1}{2}+\frac{1}{4}+\dots+\frac{1}{2^{i-1}} = 121g=1+21+41+⋯+2i−11=1
g=2g = 2g=2.
例2
丢一颗骰子,出现1的期望次数。
g=1∗16+2∗56∗16+⋯+56i−1∗16∗ig=1*\frac{1}{6}+2*\frac{5}{6}*\frac{1}{6}+\dots+{\frac{5}{6}}^{i-1}*\frac{1}{6}*ig=1∗61+2∗65∗61+⋯+65i−1∗61∗i
56g=1∗16∗56+2∗562∗16+⋯+56i∗16\frac{5}{6}g=1*\frac{1}{6}*\frac{5}{6}+2*\frac{5}{6}^2*\frac{1}{6}+\dots+\frac{5}{6}^{i}*\frac{1}{6}65g=1∗61∗65+2∗652∗61+⋯+65i∗61
g−56g=16∗∑i=1∞56i−1g-\frac{5}{6}g=\frac{1}{6}*\sum_{i=1}^\infin\frac{5}{6}^{i-1}g−65g=61∗∑i=1∞65i−1
g=6g=6g=6
也可以用递推的方式来求,这是更加简便的方法。
例3
丢一枚硬币,出现正面的期望次数。
设xxx为丢出正面的期望次数,丢一次以后,有12\frac{1}{2}21的概率回到原状态,仍然是xxx, 也有12\frac{1}{2}21的概率成功,成功了就不需要再丢了。刚才花费了一次。所以有以下的递推式:
x=12x+12∗0+1x=\frac{1}{2}x+\frac{1}{2}*0+1x=21x+21∗0+1
解得x=2x=2x=2
又如丢骰子,丢出每个面的概率都是16\frac{1}{6}61
设丢出1的期望次数为xxx, 丢1次以后,有16\frac{1}{6}61的概率成功,不需要再丢了;有56\frac{5}{6}65的概率未成功,即回到原状态,仍然期望丢xxx次。而刚才花费了1次,所以,有以下的递推式:
x=56∗x+16∗0+1x = \frac{5}{6}*x+\frac{1}{6}*0+1x=65∗x+61∗0+1
解得x=6x=6x=6.
例4
有n种牌,每种牌各1张,你取到每种牌都是等概率的,你取一张牌,记下该牌的种类,然后放回去。请问你记下所有的种类的牌期望要取多少次?
分析:
设f[i]f[i]f[i]表示当前已经取到了i种牌,最后离成功(取到所有种类的牌)所期望的次数。
显然f[n]=0f[n]=0f[n]=0.
f[i]=in∗f[i]+n−in∗f[i+1]+1f[i] = \frac{i}{n}*f[i]+\frac{n-i}{n}*f[i+1]+1f[i]=ni∗f[i]+nn−i∗f[i+1]+1
f[i]=f[i+1]+nn−if[i]=f[i+1]+\frac{n}{n-i}f[i]=f[i+1]+n−in
这个题也适用于前面的简单的情形,即期望的次数是概率的倒数,因为一次取牌事件发生后,要么成功,要么回到原状态。取牌事件之间也是独立的。
即当前有i张牌,你有n−in\frac{n-i}{n}nn−i的概率取到1张新牌,有in\frac{i}{n}ni的概率取到一张之前的牌,仍然回到原状态。即从iii张牌到i+1i+1i+1张牌,只有n−in\frac{n-i}{n}nn−i的概率成功,这一步需要花费的期望次数为n−in\frac{n-i}{n}nn−i.
所以有:
f[i]=f[i+1]+n−inf[i]=f[i+1]+\frac{n-i}{n}f[i]=f[i+1]+nn−i
一种错误的递推方式:
设f[i]f[i]f[i]表示从取到iii张牌期望的取牌次数,考虑最近一次的取牌操作,有in\frac{i}{n}ni的概率取得的是旧牌,有n−i+1n\frac{n-i+1}{n}nn−i+1的概率取得新牌。刚才的取牌花掉了一次操作,所以有下式:
f[i]=f[i]∗in+f[i−1]∗n−i+1n+1f[i] = f[i]*\frac{i}{n} + f[i-1]*\frac{n - i + 1}{n} + 1f[i]=f[i]∗ni+f[i−1]∗nn−i+1+1
f[1]=1f[1]=1f[1]=1
此处的问题主要是f[i]f[i]f[i]的意义与题意不符。按题意描述,如果取到了nnn种牌,则不应再取了。而此处的f[n]f[n]f[n]取到了nnn种牌后,仍然可能取牌。
所以,此处求出的f[n]f[n]f[n]并不能表示题目中期望次数。
例5.
题意:一个图有n个顶点,现在你站在顶点1处。开始时,图中没有边。
你可以重复以下操作:
-
从n个点中选择一个点(可以包含你当前所在的点),每个点都有1N\frac{1}{N}N1的概率被选中。每次选择都是独立的,和上一次选择无关。
-
在你当前站立的点和选择的点之间连一条边,然后移动到你选择的点上。
求图变为连通图时,期望的操作次数。
数据规模
2≤N≤1052 \leq N \leq 10^52≤N≤105
这题与例4完全相同。
例6 . csp初赛题
现有一只青蛙,初始时在 n 号荷叶上。当它某一时刻在 k 号荷叶上时,下一时刻将等概 率地随机跳到 1, 2, …, k 号荷叶之一上,直至跳到 1 号荷叶为止。当 n = 2 时,平均一共 跳 2 次;当 n = 3 时,平均一共跳 2.5 次。则当 n = 5 时,平均一共跳_________次。
分析:设f[i]f[i]f[i]表示青蛙在iii号荷叶上时,要跳到1号荷叶上的期望次数。
f[i]=f[i]∗1i+f[i−1]∗1i+⋯+f[1]∗1i+1f[i]=f[i]*\frac{1}{i}+f[i-1]*\frac{1}{i}+\dots+f[1]*\frac{1}{i} + 1f[i]=f[i]∗i1+f[i−1]∗i1+⋯+f[1]∗i1+1
显然f[1]=0f[1] = 0f[1]=0
根据递推式,可以求出:f[2]=2,f[3]=2.5,f[4]=176,f[5]=3712f[2] = 2, f[3] = 2.5, f[4] = \frac{17}{6},f[5] = \frac{37}{12}f[2]=2,f[3]=2.5,f[4]=617,f[5]=1237
例7. 涂格子
n个格子,每次随机涂一个,求涂m次后期望涂色格子数。
分析:
设f[i]f[i]f[i]表示涂iii次后期望涂多少个格子。
f[i]=f[i−1]+n−f[i−1]nf[i]=f[i-1]+\frac{n-f[i-1]}{n}f[i]=f[i−1]+nn−f[i−1]
例8. 涂格子
nnn个格子,每次随机选一个格子涂色,第iii个格子被选到的概率为pip_ipi, (∑pi=1)(\sum_{p_i}=1)(∑pi=1),求涂完所有格子的期望次数。
数据规模:n≤20n \leq 20n≤20
分析:
因为每个格子的概率不一样,所以不能以格子数量来作为状态,而以涂色格子的二进制state来表示状态。
设f[state]f[state]f[state]涂到的格子为statestatestate时,到最终状态期望的次数。
则有f[state]=∑i=0n−1f[state∣(1<<i)]∗pi+1f[state] =\sum_{i=0}^{n-1} f[state |(1<<i)]*p_i+1f[state]=∑i=0n−1f[state∣(1<<i)]∗pi+1
例9. 亚瑟王的生日庆典(poj3682)
题意:亚瑟王掷一枚硬币,正面朝上的概率为ppp,反面朝上的概率为1−p1-p1−p。现在亚瑟王要举办生日庆典,举办的天数通过掷硬币确定。他每天掷有一次硬币,直到掷出k次正面朝上,就结束。第iii天的花费为2∗i−12*i-12∗i−1。问:
期望要掷多少枚硬币才能达到kkk次正面朝上,以及达到kkk次正面朝上时的花费。
分析:
设f[i]f[i]f[i]表示已经掷出iii次正面朝上,要完成k次还需要的期望次数。则有:
f[i]=f[i+1]∗p+f[i]∗(1−p)+1f[i]=f[i+1]*p+f[i]*(1-p)+1f[i]=f[i+1]∗p+f[i]∗(1−p)+1
f[i]=f[i+1]+1/pf[i] = f[i+1]+1/pf[i]=f[i+1]+1/p
则有:f[0]=n/pf[0]=n/pf[0]=n/p
设g[i]g[i]g[i]表示已经掷出iii次正面朝上,要完成kkk次还需要的期望花费。注意:这个花费按照时间倒流的方式计算也是正确的。
g[i]=g[i+1]∗p+g[i]∗(1−p)+2∗f[i]−1g[i]=g[i+1]*p+g[i]*(1-p)+2*f[i]-1g[i]=g[i+1]∗p+g[i]∗(1−p)+2∗f[i]−1
推出:g[0]=k∗(k+1)−kpp2g[0]=\frac{k*(k+1)-kp}{p^2}g[0]=p2k∗(k+1)−kp
#include<bits/stdc++.h>
int main()
{
int k;
double p,res1,res2;
while(scanf("%d%lf",&k,&p)&&k)
{
res1 = k/p;
res2 = k*(k+1)/(p*p)-res1;
printf("%.3lf %.3lf\n",res1,res2);
}
}
1329

被折叠的 条评论
为什么被折叠?



