[学习笔记] 概率与期望及其应用
前言
这是一篇初学者的学习笔记,可能有些不准确或者遗漏的地方,还请各位指出。
可以通过 目录 或者 Ctrl
+ F
寻找所需内容。
引入 - 蒙提霍尔问题
如果不需要可以跳过。
你正在参加活动。在你面前有三扇关闭的门,其中一扇门后面是奖品,另外两扇门后面是空的。你希望能获得奖品。
在这个题目背景下,有以下几个问题:
你选定了一扇门后直接打开。
此时获得奖品的概率为
在你选定了一扇门后,主持人随机打开剩下两扇门中的一扇,如果发现是空的,他会问你是否更换选择。你的决定是?
考虑以下情况:
- 你最开始选的门为奖励门(概率为
),在主持人开了空门(概率为 )后,选择换门。获得奖品的概率为 。 - 你最开始选的门为奖励门(概率为
),在主持人开了空门(概率为 )后,选择不换门。获得奖品的概率为 。 - 你最开始选的门为空门(概率为
),在主持人开了空门(概率为 )后,选择换门。获得奖品的概率为 。 - 你最开始选的门为空门(概率为
),在主持人开了空门(概率为 )后,选择不换门。获得奖品的概率为 。 - 你最开始选的门为空门(概率为
),在主持人开了奖励门(概率为 )后,选择换门。获得奖品的概率为 。 - 你最开始选的门为空门(概率为
),在主持人开了奖励门(概率为 )后,选择不换门。获得奖品的概率为 。
综上,无论换不换门,获得奖品的概率都为
在你选定了一扇门后,主持人打开剩下两扇门中的一扇空门,然后他问你是否更换选择。你的决定是?
考虑以下情况:
- 你最开始选的门为奖励门(概率为
),在主持人开了空门后,选择换门。获得奖品的概率为 。 - 你最开始选的门为奖励门(概率为
),在主持人开了空门后,选择不换门。获得奖品的概率为 。 - 你最开始选的门为空门(概率为
),在主持人开了空门后,选择换门。获得奖品的概率为 。 - 你最开始选的门为空门(概率为
),在主持人开了空门后,选择不换门。获得奖品的概率为 。
综上,换门获得奖品的概率为
通过以上问题的讨论,你已经初步接触了概率论。下文会继续讲解相关内容。
1. 事件的概念、运算与关系
1.1 基础概念
1.1.1 随机试验
具有以下特点的试验称为随机试验:
- 试验可在相同条件下重复进行。
- 试验可能出现多种结果,且试验前已知所有结果的可能性。
- 无法预测试验出现哪一结果。
通常用
举个栗子:
- E1:摇一次骰子,观察点数出现情况。
- E2:抛一次硬币,观察正反面出现情况。
1.1.2 基本事件
随机试验中可能出现的每一个结果,也称样本点。记作
举个栗子:
- 前文 E1 有六个基本事件,其中第
个基本事件为出现点数为 。 - 前文 E2 有两个基本事件,出现正面 和 出现反面。
1.1.3 样本空间
随机试验中所有基本事件构成一个集合,称为样本空间。记作
举个栗子:
- 前文 E1 的样本空间为
。 - 前文 E2 的样本空间为
。
1.1.4 随机事件
随机试验中部分基本事件构成一个集合,称为随机事件。随机事件是样本空间的子集。使用大写字母进行表示。
举个栗子:
- 前文 E1 中出现偶数点数的事件可表示为
。 - 前文 E1 中出现奇数点数的事件可表示为
。
1.1.5 事件发生
当某一事件所包含的基本事件中至少有一个发生,那么该事件发生了。
好像有点废话
1.1.6 必然事件
一定发生的事件。也就是样本空间
1.1.7 不可能事件
一定不发生的事件。记作 (然而我并不是很清楚这是什么符号,有没有大佬给个解答)
1.2 事件运算
1.2.1 事件的和(并)
事件
举个栗子:
1.2.2 事件的差
事件
举个栗子:
1.2.3 事件的积(交)
事件
1.2.4 推广
事件的和与积可推广到多个事件,而差不可以。
为什么差不可以推广?
和与积的推广长这样:
然而当你计算差时:
它似乎……不大一样呢?
1.3 事件关系
1.3.1 包含
若 事件
具体表示
注意:
1.3.2 相等
若
1.3.3 互斥
若 事件
1.3.4 对立(互逆)
若 事件
其中 事件
1.3.5 举例理解
进行三次射击,
表示第 次击中。
2. 概率
2.1 概率的数学定义
设
2.2 概率的性质及应用
2.2.1 概率的性质
。(正则性) 。 。(非负性)- 若
互不相容,则 。(可列可加性) - 若
,则 。(有限可加性)(可推广到 个互不相容的事件) 。 。 。
应该不用证明吧?
2.3 条件概率
设
举个栗子:
布袋中有
个黑球和 个白球,每次随机取出一颗球(不放回),求第两次摸到白球的概率。
- 如果第一次取出了黑球(概率为
),那么袋子中还剩下 个黑球和 个白球,第二次摸到白球的概率为 ,该情况的概率为 。 - 如果第一次取到了白球(概率为
),那么袋子中还剩下 个黑球和 个白球,第二次摸到白球的概率为 ,该情况的概率为 。
第二次摸到白球的总概率就是
由条件概率公式可推得
3. 公式与模型
3.1 全概率公式
如果事件
那么对于任一事件
特别地,对于任意两个随机事件
3.2 贝叶斯公式
设
上式即为贝叶斯公式,
贝叶斯公式建立在条件概率的基础上,寻找事件发生的原因。(即大事件A已经发生的条件下,分割中的小事件Bi的概率)
3.3 波利亚瓦罐模型
一个瓦罐中有
个黑球和 个白球。每次取出一个,记录其颜色,再将它和另外 个与它同色的球放入瓦罐中,如此循环。
结论1:第
证明:
当
假设第
考虑取到黑球的概率:
取到白球的概率:
由数学归纳法得证。
结论2:无论
证明:
设
同样考虑数学归纳法。
得证。
4. 例题
两道期望DP题。似乎和上文没什么关系???
4.1 绿豆蛙的归宿
https://www.luogu.com.cn/problem/P4316
4.1.1 题目大意
给一张
4.1.2 思路
考虑进行期望DP。
设
反向连边建图,在图上跑拓扑进行转移。
具体地讲,每次取出一个入度为零的点
4.1.3 代码实现
int n, m;
int last[N], cnt;
struct edge {
int to, next, w;
} e[N << 1];
void addedge(int x, int y, int w) {
e[++cnt].to = y;
e[cnt].next = last[x];
e[cnt].w = w;
last[x] = cnt;
}
int deg[N], lne[N]; //deg为拓扑所用的入度数, lne为出边数
queue <int> s;
double f[N];
void topsort() {
for (int i = 1; i <= n; i++)
if (deg[i] == 0) s.push(i);
while (s.size()) {
int x = s.front(); s.pop();
for (int i = last[x]; i; i = e[i].next) {
int v = e[i].to; deg[v]--;
f[v] += (f[x] + e[i].w) * 1.0 / lne[v];
if (!deg[v]) s.push(v);
}
}
}
int main() {
n = read(), m = read();
for (int i = 1; i <= m; i++) {
int u = read(), v = read(), w = read();
addedge(v, u, w); deg[u]++, lne[u]++; //反向建边
}
topsort();
printf("%.2lf", f[1]);
return 0;
}
4.2 [NOIP2016 提高组] 换教室
https://www.luogu.com.cn/problem/P1850
4.2.1 题目大意
一共有
一般来讲,学生需按时间在
牛牛可以提交最多
问申请更换教室后 在教室间移动耗费的体力值的总和 的期望值 最小是多少。
4.2.2 思路
需要知道每两间教室直接的最短路长度时多少。这可以用 Floyed 解决。
然后考虑DP,设
怎么转移?
答案即为
4.2.3 代码实现
dp转移太长了,代码很丑,见谅~
const int N = 2010, M = 90010;
const double INF = 1e17;
int n, m, cntroom, cntedge, c[N], d[N];
ll dis[N][N];
double f[N][N][2], k[N];
int main() {
n = read(), m = read(), cntroom = read(), cntedge = read();
for (int i = 1; i <= cntroom; i++)
for (int j = i + 1; j <= cntroom; j++)
dis[i][j] = dis[j][i] = INF;
for (int i = 1; i <= n; i++) c[i] = read();
for (int i = 1; i <= n; i++) d[i] = read();
for (int i = 1; i <= n; i++) scanf("%lf", &k[i]);
for (int i = 1; i <= cntedge; i++) {
int u = read(), v = read(), w = read();
dis[u][v] = dis[v][u] = min(dis[u][v], w * 1ll);
}
for (int p = 1; p <= cntroom; p++)
for (int i = 1; i <= cntroom; i++)
for (int j = 1; j <= cntroom; j++)
dis[i][j] = min(dis[i][j], dis[i][p] + dis[p][j]);
for (int i = 0; i <= n; i++)
for (int j = 0; j <= m; j++)
f[i][j][0] = f[i][j][1] = INF;
f[1][0][0] = f[1][1][1] = 0;
for (int i = 2; i <= n; i++) f[i][0][0] = f[i - 1][0][0] + dis[c[i - 1]][c[i]];
for (int i = 2; i <= n; i++)
for (int j = 1; j <= min(i, m); j++) {
f[i][j][0] = min(f[i - 1][j][0] + dis[c[i - 1]][c[i]], f[i - 1][j][1] + dis[d[i - 1]][c[i]] * k[i - 1] + dis[c[i - 1]][c[i]] * (1 - k[i - 1]));
f[i][j][1] = min(f[i - 1][j - 1][0] + dis[c[i - 1]][d[i]] * k[i] + dis[c[i - 1]][c[i]] * (1 - k[i]), f[i - 1][j - 1][1] + dis[d[i - 1]][d[i]] * k[i - 1] * k[i] + dis[d[i - 1]][c[i]]* k[i - 1] * (1 - k[i]) + dis[c[i - 1]][d[i]] * (1 - k[i - 1]) * k[i] + dis[c[i - 1]][c[i]] * (1 - k[i - 1]) * (1 - k[i]));
}
double ans = INF;
for (int i = 0; i <= m; i++) ans = min(ans, min(f[n][i][0], f[n][i][1]));
printf("%.2lf\n", ans);
return 0;
}
参考资料
本文作者:shiranui
本文链接:https://www.cnblogs.com/shiranui/p/16858780.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步