基础知识
概率定义
(P(A)) 为事件 (A) 发生的概率, (P(A|B)) 为在 (B) 事件发生的前提下 (A) 事件发生的概率。
概率性质
-
加法公式:(A,B) 独立,则 (P(Aor B)=P(A)+P(B))。( (P(Aor B)) 就是 (A) 发生或者 (B) 发生)
广义加法公式:(A,B) 任意,则 (P(Aor B)=P(A)+P(B)-P(Aand B))。( (P(Aand B)) 就是 (A) 发生且 (B) 发生)
-
乘法公式:
(A,B) 独立, (P(A*B)=P(A)*P(B))。
(A,B) 任意,(P(A*B)=P(A)*P(B|A)=P(B)*P(A|B))。
-
全概率公式、贝叶斯定理……(略)
期望定义
(E(A))。
期望性质
-
若 (A) 是事件, (C) 是常数,则 (E(CA)=C*E(A))
证明:
设 (A) 的多个随机变量为 (Ca_1,Ca_2...Ca_n),对应出现的概率为 (p_1,p_2...p_n),则有:
[E(CA)=sumlimits_{i=1}^n*(Ca_ip_i)=Csumlimits_{i=1}^n*(a_ip_i)=C*E(A) ] -
(A,B) 任意,则 (E(A+B)=E(A)+E(B))。
-
(A,B) 独立,则 (E(AB)=E(A)E(B))。
-
期望等于所有的方案数的贡献除以方案数。
下面是一些经典问题。
票券收集问题1
题意
有 (n) 种票券,每次等概率抽取一张票券,求抽到所有 (n) 种票券的抽取次数的期望。
思路 1
如果手上已经有 (i-1) 种票券,
则 (large P(取一个票券为新票券)=frac{n-i+1}{n}),
则 (large E(取到新票券)=frac{1}{P(...)}=frac{n}{n-i+1}),
则总期望为 (largesumlimits_{i=1}^nfrac{n}{n-i+1}=sumlimits_{i=1}^nfrac{n}{i})。
思路 2
期望 DP !!
设 (f_i) 为取了 (i) 种票券后,还要取多少票券才能集齐的期望。
显然 (f_n=0),考虑逆推。
考虑到抽到 (i) 种票券后再抽一个是新票券的概率是 (Large frac{n-i}{n}) ,旧票券概率是 (Large frac i n),则有方程 (Large f_i=frac{n-i}{n}f_{i+1}+frac i n f_i+1)。(加一是因为一定要投一次)。
[frac{n-i}nf_i=frac{n-i}nf_{i+1}+1\ f_i=f_{i+1}+frac{n}{n-i}\ f_i=f_{i+2}+frac n {n-i-1}+frac n {n-i}\ ...\ f_0=sum frac{n}{n-i+1}=sum frac n i ]
所以答案为 (Large sum frac n i)。
票券收集问题2
题意
有 (n) 种票券,每次等概率抽取一张票券,第 (k) 次抽彩需要 (k) 元钱,求抽到所有 (n) 种票券的抽取花费的期望。
解法1
接着“票券收集问题1”的 (f)(此时我们需要推出所有的 (f) ,用上边的递推式 (large f_i=f_{i+1}+frac{n}{n-i})),我们再设计设 (g_i) 为取了 (i) 种票券后,还要去多少花费才能集齐的期望。
显然当我每抽一次彩,除了这一次抽彩花费的一元之外,我未来购买的票券都会贵一元,所以一共会多出 (f_i+1) 元。所以有:
解法2
如果我们买了 (x) 张票券,则总花费为 (large 1+2+...+x=frac{(x+1)x}{2}=frac{x^2+x}2)。
注意到只有 (x,x^2) 两个未知量,我们采用 OSU 的维护方法(参见下文经典题目 “OSU”)。
维护 (c_i) 为取了 (i) 种票券后,还要取多少次的期望; (d_i) 为还要取多少次的平方的期望。
最后就是 (Large ans=frac{c_0+d_0}{2})。
走图1
题意
有边权无向图 (G),从 (1) 出发到 (n),在一个点会等概率选择一个出度并走去下一个点,求到 (n) 经过的边权和的期望。(保证从 (1) 能走到任何点,任何点都能走到 (n))。
解法
设 (f_i) 为 (i o n) 的期望路径长。显然 (f_n=0)。
那么设 (i) 点出度为 (k),有 (f_i=frac1 k(sum f_v+w_E))。
然后拓扑或 dfs 决定更新顺序。
走图2
题意
有无向图 (G),求随机选择一条路径走过的边数的期望。
解法
用期望性质4,设 (sum) 为所有路径长度总和,(cnt) 为路径个数。
那对于每个点, (f_i) 为从 (i) 开始的所有路径长度总和,(g_i) 为从 (i) 开始的路径个数,有 (sum=sum f_i,cnt=sum g_i)。
(f_i=sum f_v+g_v) 本有总长为 (f_v) 的路径,每条路径都变长加一,一共有 (g_v) 条路径。
(g_i=1+ sum g_v) 所有路径加上自己到自己这条路径。
OSU
题意
一个长度为 (n) 的数列,每一位为 0 或 1,第 (i) 位为 1 的概率是 (p_i)。对于一段长度为 (l) 的、极长的、连续的 1,会贡献 (l^2) 的分数。求数列分数总和的期望。
误区
(x) 期望的平方不等于 (x) 平方的期望!
比如 (x) 有一半概率等于 1,一半概率等于 2,则 (large E(x^2)=frac{1^2+2^2}{2}=2.5);但是 (large E^2(x)=(frac{1+2}{2})^2=2.25),这显然不可理喻、强词夺理、荒唐错乱、荒谬至极!
理解 1
设 (ans_i) 是以 (i) 为结尾的答案, (f_i) 是以 (i) 结尾的成功连击数的期望。
然后设所有的数列最终状态是集合 (S),每一种状态 (K) 都可以分成若干个极长的全 1 块,长度分别为 (r_1,r_2,...r_k),则有:
其中 (p_K) 为 (K) 这种状态出现的概率。
同时我们也可以重新定义 (f_i),有 (f_i=sum p_Kr_t)。
所以可以推得:
理解 2
相当于每一个 1 会发生 (2x+1) 的贡献。
所以 (ans_{i+1}=ans_i+p_{i+1}(2f_i+1))。
下面是一些杂题。
纯粹容器
题意
有 (n) 个物品排成一列,第 (i) 个物品强度为 (a_i)。每一秒会随机选择两个相邻的物品相撞,强度较小的那个会破碎,被移除队列(即原本不相邻的物品可能会现在相邻)。求每个物品存活时间的期望。
$O(n^2) $ 解法
设 (P(i=x)) 为某物品存活时间等于 (i) 的概率,则显然 (E=sumlimits_{i=1}^{n-1}iP(i=x))。
展开来就是
重申 (large E=sum_limits{i=1}^{n-1}P(ile x))。
于是设 (pre) 为在物品 (x) 左边第一个强度比它大的物品, (nxt) 为在物品 (x) 右边第一个强度比它大的物品。则如果 (presim x) 一段物品或 (xsim nxt) 一段物品全部被打碎,则这个物品就碎了。
设 (P(A)) 为 (presim x) 全部破碎的概率, (P(B)) 为 (xsim nxt) 全部破碎的概率。则 (P(Aand B)) 为 (presim nxt) 全部破碎的概率。
则 (P(ige x)=P(A)+P(B)-P(Aand B))。
(P(ile x)=1-P(A)-P(B)+P(Aand B)) 然后推推柿子就好了。
(O(n)) 解法
大佬解法,不会。