数学期望

一.数学期望定义

1.离散型随机变量

设离散型随机变量 \(X\) 的概率分布为 \(p_i = P\{ X = x_i \}\),若和式$$\sum x_i \cdot p_i$$绝对收敛,则称其值为 \(X\) 的 期望,记作 \(E_X\)
——oiwiki

说白了就是概率乘权值。

离散型随机变量的期望有如下几条优美的性质:

  1. \(E_{X+Y}=E_X+E_Y\)

  2. \(E_{aX+bY}=a \cdot E_X+b \cdot E_Y\)

  3. 若随机变量 \(X,Y\) 的期望存在且 \(X,Y\) 相互独立,则有$$E_{XY} = E_X \cdot E_Y$$注意:上述性质中的独立性并非必要条件

  4. 对于随机事件 A,考虑其示性函数 $I_A:I_A(\omega) = $

\[\begin{cases} 1, & \omega \in A \\ 0, & \omega \notin A \\ \end{cases} \]

根据定义可以求得其期望 \(E_{I_A} = P(A)\)。这一转化在实际应用中非常常见。

下面我们举个栗子:

扔一个标准的、六个面上分别有1~6六个数字的骰子,向上的那面上的数字的期望就是\(1 \times \frac 16 + 2 \times \frac 16 + 3 \times \frac 16 + 4 \times \frac 16 + 5 \times \frac 16 + 6 \times \frac 16=3.5\)


2.连续性随机变量

它的定义式长这样:

设连续型随机变量 \(X\) 的密度函数为 \(f(x)\)。若积分\(\int_{\mathbb{R}} xf(x) \text{d} x\)绝对收敛,则称其值为 \(X\) 的 期望,记作 \(E_X\)

然鹅由于本蒟蒻没学过积分,所以看上去并不是很好懂。。。这一块得让数学dalao讲。


二.应用

说白了,期望就只是一个数学名词、定义,题目很多都是根据定义推式子。

例一.P3802

我们先考虑第七次释放魔法时触发大招的概率:

先假设是按照1、2、3、4、5、6、7的顺序触发,令\(N=\sum\limits_{i=1}^{7} {a_i}\)那么:

\(P_7^{'}=\frac{a_1}{N} \times \frac{a_2}{N-1} \times \frac{a_3}{N-2} \times \frac{a_4}{N-3} \times \frac{a_5}{N-4} \times \frac{a_6}{N-5} \times \frac{a_7}{N-6}\)

由于触发大招的元素顺序不重要,且分子可以随意交换,所以这七种元素触发大招时,即使顺序不同,对于一种特定顺序,触发概率相等,所以:

\(P_7=7! \times P_{7}^{'}=7! \times \frac{a_1}{N} \times \frac{a_2}{N-1} \times \frac{a_3}{N-2} \times \frac{a_4}{N-3} \times \frac{a_5}{N-4} \times \frac{a_6}{N-5} \times \frac{a_7}{N-6}\)

接下来我们考虑第八次触发大招的概率。因为大招之间互不影响,所以第八次触发大招相当于前面浪费一个魔法,而这个魔法的种类无所谓,也就是:

\(P_8=\frac{a_1}{N}P_7+\frac{a_2}{N}P_7+\frac{a_3}{N}P_7+\frac{a_4}{N}P_7+\frac{a_5}{N}P_7+\frac{a_6}{N}P_7+\frac{a_7}{N}P_7=P_7\)

发现没有?第八次触发大招的概率和第七次相等。以此类推,在第任意次触发大招的概率都和在第七次触发大招的概率相等。

既然概率算完了,那期望就相当于\(\sigma\)概率×权值,很显然每次触发大招的权值为1,所以最终答案\(ans=(n-6)P_7\)

代码:

点击查看代码
#include<bits/stdc++.h>
using namespace std;

const int N=15;
int a[N],SUM;
double ans,fac=1;

int main(){
	for(int i=1;i<=7;i++){
		scanf("%d",&a[i]);
		SUM+=a[i];
		fac=fac*i;
	}
	if(SUM<=6){//不够7点魔法值自然无法触发大招 
		printf("0.000\n");
		return 0;
	}
	ans=1.00000;
	for(int i=1;i<=7;i++){
		//计算P7' 
		ans=ans*a[i]*1.00000/(SUM-i+1.00000);//分清SUM和n
	}
	ans=ans*1.00000*fac*(SUM-6.00000);
	printf("%.3lf",ans);
	return 0;
}

例二.P5011

看似很难,实则一点都不简单

因为模数找到的这个题,黑色的数字越看越红。

我们可以把单独一个动作的贡献和组合技的贡献拆开分别计算期望。这样根据期望的线性性,总期望就是两个期望累加。

先看单独一个动作的贡献总和的期望:

下面记\(sum=\sum\limits_{i=1}^{k} {a_i}\)

某个位置出现第\(i\)种动作的概率是\(\frac 1k\),所以这个位置的贡献期望为\(\frac 1k \times sum\),共有n个位置,所以这部分的总期望为\(\frac nk \times sum\)

接下来是组合技的贡献总和的期望:

刚才我们说过某个位置出现第\(i\)种动作的概率是\(\frac 1k\),所以某个位置出现\(i、i+1\)\(i=k\)时为\(k、1\))组合技的概率就是\(\frac {1}{k^2}\)。那么这个位置出现组合技的期望就是\(\sum\limits_{i=1}^{k}{a_i+a_{ (i+1) mod k} } \times \frac {1}{k^2}\)

我们化简一下上面的式子,由于每个动作\(i\)都会在上面的累加中被统计两次,所以每个位置出现组合技的期望又可以写做\(sum \times \frac {2}{k^2}\)。共有\(n-1\)个位置可以出组合技,所以这部分的期望就是\((n-1) \times sum \times \frac {2}{k^2}\)

将两部分期望相加就是答案。

至于如何求一个分数的mod,也是很好理解的:将分子/分母变成分子*inv(分母)。(不然这个题为什么要给求逆元代码)

最后就是这个很毒瘤的n的取值范围。。。这个时候就体现出快读的好处了,可以一边读入一边取模,具体怎么操作,每次x=x*10+c-'0'时将x取模就好了。

\(\color{red}{祝愿我们伟大的祖国繁荣昌盛!在此提前祝贺祖国母亲76岁生日快乐!}\)

代码:

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;

const int mod=19491001;
const int N=1e6+6;

inline int read(){
	int x=0;char c=getchar();
	while(c<48) c=getchar();
	while(c>47) x=(((x<<1)+(x<<3))%mod+(c^48))%mod,c=getchar();
	return x;
}

int n,k,a[N],ans1,ans2,sum;

inline int qpow(int x,int y){
	int ans=1;
	while(y){
		if(y&1) ans=(ans*x)%mod;
		x=(x*x)%mod;y>>=1;
	}
	return ans;
}

inline int inv(int x){
	return qpow(x,mod-2);
}

signed main(){
	n=read(),k=read();
	for(int i=1;i<=k;i++){
		a[i]=read();
		sum=(sum+a[i])%mod; 
	}
	ans1=n*sum%mod*inv(k)%mod;
	ans2=2*sum%mod*((n-1)%mod+mod)%mod*inv(k*k%mod)%mod;
	printf("%lld",(ans1+ans2)%mod);
	return 0;
}

时间似乎不太够。。。

其他题目:
ABC411E
B4337
P4007
P3211

以后可能还会不定时更新。

posted @ 2025-08-09 20:20  qwqSW  阅读(66)  评论(0)    收藏  举报