期望简述
概念
数学期望,简称期望,就是指在实验中事件发生的概率乘以该事件的价值的总和,可以反应随机变量的平均取值大小
离散型变量:若一个变量的值域为一段或几段区间,且该变量的取值是有限或无限个,但是能够按一定次序枚举列出,则称其为离散型随机变量,对应的,它的每个取值的概率 \(p(i)\) 与它的对应取值 \(a_i\) 的乘积之和,即为期望值( \(E(X)\) ),称为离散型随机变量的数学期望,即:\(E(X)=\sum_{i=1}{a_i \times p(i)}\)
连续型变量:在该变量的值域上,无法按照某种次序将这些变量的取值一一列出,则称其为连续型随机变量
性质
-
一个常量的期望等于它本身(显然,常量被取到的概率为 \(1\) )
-
和的期望等于期望的和,即 \(E(X+Y)=E(X)+E(Y)\) (这个性质最为常用)
-
\(E(CX)=C \times E(X)\) ( \(C\) 为一个常量,\(X\) 为一个事件)
-
若 \(X , Y\) 为两个相互独立的事件,则有 \(E(XY)=E(X)E(Y)\)
例题
https://www.luogu.com.cn/problem/P6858
题意简述:
有一个长为 \(n+m\) 的 \(01\) 串,其中有 \(n\) 个 \(1\) 和 \(m\) 个 \(0\) ,每次可以进行一次操作,可以将一个 \(0\) 删除,同时将串中剩余的所有 \(0\) 都变为 \(1\) ,或者是将一个 \(1\) 变为 \(0\) ,等概率选择一个位置进行操作,要将该串全部删除,求期望操作次数
分析
首先考虑 \(m=0\) 的情况,那么在串中就只有 \(n\) 个 \(1\) ,进行一次操作,无论选取哪个位置,都会变为 \(n-1\) 个 \(1\) ,以及 1 个 \(0\) ,对于下一次操作,就有 \(\frac{1}{n}\) 的概率选中为 \(0\) 的位置,将其删除,变为含有 \(n-1\) 个 \(1\) 的 \(01\) 串,或者是以 \(\frac{n-1}{n}\) 选中一个为 \(1\) 的位置,将其变为 \(0\) ,但同时,该串中的另一个 \(0\) 就会变为 \(1\) ,仍然为 \(n-1\) 个 \(1\) ,\(1\) 个 \(0\) 的串,设 \(g(i)\) 为含有 \(i\) 个 \(1\) ,不含 \(0\) 的串,则期望操作数为 : \(g(i) = 1 + \frac{1}{i} \times g(i-1) + \frac{i-1}{i} \times g(i)\)
经过移项整理,我们可以得到 \(g(i) = i + g(i-1) + 1\) ,将 \(g(0)=0\) 代入推导,可得 \(g(i)=\frac{(i+3)\times i}{2}\)
之后,我们考虑 \(m!=0\) 时,设 f(i) 为有 \(n\) 个 \(1\) , \(i\) 个 \(0\) 的串需要操作的期望数,显然,我们有 \(\frac{i}{n+i}\) 的概率选中 \(0\) ,将其变为一个 \(n-1\) 个 \(1\) , \(i\) 个 \(0\) 的串 ,对该串的期望操作数即为 \(f(i-1)\) ,同时,我们有 \(\frac{n}{n+i}\) 的概率选到一个 \(1\) ,将其变为 \(0\) ,同时将其余的 \(i\) 个 \(0\) 变为 \(1\) ,变为一个 \(n+i-1\) 个 \(1\) , \(1\) 个 \(0\) 的串,此时,该串的期望操作数就是 \(g(n+i)-1\)
由此,我们可以得到一般的递推式:设 \(f(i)\) 表示有 \(n\) 个 \(1\) , \(i\) 个 \(0\) 的串的期望操作次数,则 \(f(i)=1+\frac{i}{n+i} \times f(i-1) + \frac{n}{n+i} \times (g(n+i)-1)\) , \(f(0)=g(n)\)
递推即可
https://www.luogu.com.cn/problem/P6154
题意简述
定义一个图中的一条路径长度为经过的边数,在图中等概率地选择一条路径(路径的起点与终点可以相同),求一个有向无环图的期望路径长度
分析
对于整个图来说,因为期望的和等于和的期望,那么设 \(sum\) 为所有路径长度的总和, \(cnt\) 为路径数量,则期望为 \(E(X)=\frac{sum}{cnt}\)
只需维护以 \(i\) 为起点的路径数及其路径长度总和,记忆化搜索即可
Code
ll a[maxn],b[maxn];//a[]表示以 i 为起点的路径长度总和,b[] 表示以 i 为起点的路径总数
vector<ll> e[maxn];//存图
inline void dfs(ll x)//记忆化搜索
{
if(b[x]) return ;
b[x]=1;
for(int i=0;i<e[x].size();i++)
{
ll y=e[x][i];
dfs(y);
(a[x]+=a[y]+b[y])%=mod;
(b[x]+=b[y])%=mod;
}
}