2026.5.4情报系统听课笔记

贝叶斯公式:
\[\begin{align*}
P(AB) =& P(A)P(B|A)\\
\therefore P(B)P(A|B) =& P(A)P(B|A) \\
\therefore P(A|B) =& \dfrac{P(A)P(B|A)}{P(B)}
\end{align*}
\]
\(A,B\) 同时发生的概率等于 \(A\) 发生的概率乘以在 \(A\) 发生的条件下 \(B\) 发生的概率。
期望的线性性:
\[E(A + B) = E(A) + E(B)
\]
当 \(A,B\) 独立(互不影响)时:
\[E(AB) = E(A)E(B)
\]
线性性的例子:

设 \(X_i\) 相互独立,且 \(\sum X_i = X\),\(E(X_1) = E(X_2) = \cdots\)。
则
\[\begin{align*}
E(X^2)& = E((\sum X_i)^2) = E(\sum_{i,j}(X_iX_j))\\&= E(\sum_{i}X_i^2 + \sum_{i\not= j}(X_iX_j))\\
&=E(\sum_iX_i^2) + E(\sum_{i\not= j}(X_iX_j)) \\
&=nE(X_1^2) + n(n - 1)(E(X_1))^2
\end{align*}
\]









点击查看代码
#include <iostream>
#include <queue>
#include <cstdio>
#include <vector>
#include <algorithm>
#define pii std::pair<int, int>
using std::cin;
using std::cout;
const int N = 1e5 + 10;
double f[N];
int deg[N];
int ddeg[N];
std::queue<int> q;
std::vector<pii> e[N];
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= m; ++i)
{
int u, v, w;
cin >> u >> v >> w;
e[v].push_back({u, w});
deg[u]++;
ddeg[u]++;
}
for (int i = 1; i <= n; ++i)
{
if (!deg[i])
q.push(i);
}
while (q.size())
{
int x = q.front();
q.pop();
for (auto nxt : e[x])
{
int to = nxt.first;
int val = nxt.second;
deg[to]--;
f[to] += (f[x] + val) / ddeg[to];
if (!deg[to])
q.push(to);
}
}
printf("%.2lf\n", f[1]);
return 0;
}

注意到
\[n^2 = \sum^n_{i = 1}(2(i - 1) + 1)
\]
因此我们可以转化一下:

点击查看代码
#include <iostream>
#include <cstdio>
using std::cin;
using std::cout;
const int N = 3e5 + 10;
double f[N];
double len[N];
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; ++i)
{
char c;
cin >> c;
double p;
if (c == 'o')
p = 1;
else if (c == 'x')
p = 0;
else
p = 1.0 / 2;
len[i] = p * (len[i - 1] + 1);
f[i] = f[i - 1] + p * (2.0 * len[i - 1] + 1);
}
printf("%.4lf", f[n]);
return 0;
}
进阶版:

点击查看代码
#include <iostream>
#include <cstdio>
using std::cin;
using std::cout;
const int N = 3e5 + 10;
double ans[N];
double x2[N];
double x[N];
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; ++i)
{
double p;
cin >> p;
x[i] = x[i - 1] + 1;
x2[i] = x2[i - 1] + 2.0 * x[i] - 1;
ans[i] = ans[i - 1] + p * (3.0 * x2[i] - 3.0 * x[i] + 1);
x[i] *= p;
x2[i] *= p;
}
printf("%.1lf", ans[n]);
return 0;
}
数轴上随机游走(一维随机游走):
已知有无穷个位置:\(\cdots,-2,-1,0,1,2,\cdots\),每一步有 \(p > 50\%\) 的概率向右走,\(1-p\) 的概率向左走,求从 \(0\) 走到 \(n\) 走的步数的期望。
首先设 \(f\) 为第一次走到 \(1\) 的期望步数,则走到 \(n\) 的期望步数为 \(nf\),因为需要从 \(0\to 1,1\to 2,\cdots 2\to n\)。
又因为 \(f = p\cdot 1 + (1 - p)\cdot 2f\)(从 \(0\) 走有 \(p\) 的概率到 \(1\),又有 \(1-p\) 的概率走到 \(-1\),此时又需要走两次才能到 \(1\))。
所以 \(f = \dfrac{1}{2p - 1}\)。

浙公网安备 33010602011771号