Update:
2024.7.9 改正了一些小错误(为什么抄都能抄错啊),完善问题 3 的步骤。
概率密度函数和累积分布函数
对于随机变量 \(X\),用概率密度函数 \(f(x)\) 描述它的取值分布,累积分布函数 \(F(x)\) 为概率密度函数的前缀积分。即:
\[F(x)=P(X \leq x)
\]
\[F(x)=\int_{-\infty}^x f(x)dx,f(x)=F'(x)
\]
注意 \(f(x) \neq P(X=x)\),因为 \(P(X=x)=0\)。
当 \(a \leq X \leq b\) 时,可以用 \(f(x)\) 来描述 \(X\) 的期望:
\[E(x)=\int_a^bxf(x)dx
\]
由于 \(f(x)\) 难以直接计算,通常用 \(F(x)\) 来表示。
假设 \(k \geq 0\),则有:
\[\begin{aligned}
\int_0^k xf(x)dx
& =\int_0^k \int_0^x f(x) dy dx\\
& =\int_0^k \int_y^k f(x) dx dy\\
& =\int_0^k F(k)-F(y) dy\\
& =kF(k)-\int_0^k F(x) dx\\
\end{aligned}
\]
当 \(0 \leq a \leq b\) 时,有:
\[\int_a^b xf(x)dx=bF(b)-aF(a)-\int_a^b F(x) dx
\]
计算时通常都会将整个值域计算到,可以简化为:
\[\int_a^b xf(x)dx=b-\int_a^b F(x) dx=a+\int_a^b (1-F(x)) dx
\]
问题 1 (ABC226H Random Kth Max)
- 有 \(N\) 个随机变量,第 \(i\) 个随机变量在 \([L_i,R_i]\) 间等概率随机取值,求随机变量中第 \(K\) 大的期望。
钦定 \(x\),算 \(P(X \leq x)\)。
第 \(k\) 大 \(\leq x\),等价于恰好有 \(t\) 个 \(\geq x\),其中 \(t < k\)。
先对 \(N\) 个区间离散化,对每一段算出累积分布函数的表达式再积分即可。
具体而言,设当前计算区间为 \((l,r)\),第 \(i\) 个随机变量区间对应的生成函数为:
\[F_i(x,y)=
\begin{cases}
y,L_i \geq r\\
1,R_i \leq l\\
(x-L_i)+(R_i-x)y,L_i \leq l \wedge R_i \geq r
\end{cases}
\]
维护一个支持删除的背包即可。
总共修改次数为 \(O(N)\),每次修改复杂度为 \(O(NK)\),故总复杂度为 \(O(N^2K)\)。
问题 2 (CF1153F Serval and Bonus Problem)
- 在长度为 \(l\) 的线段上随机取 \(n\) 个区间,求被至少 \(k\) 个区间覆盖的长度期望。
显然每个位置独立,考虑钦定算位置 \(x\) 被至少 \(k\) 个区间覆盖的概率。
至少不好算,改成恰好。
\[\begin{aligned}
Ans
& =\int_0^l \dbinom{n}{k} (2 \dfrac{x}{l} \dfrac{l-x}{l})^k (1-2\dfrac{x}{l} \dfrac{l-x}{l})^{n-k} dx\\
& =\dbinom{n}{k} l \int_0^1 [2x (1-x)]^k [1-2x(1-x)]^{n-k} dx\\
\end{aligned}
\]
接下来把后面这东西化成 Beta 函数公式的形式,所以 \((1-x)\) 不要拆开。
令 \(t=2x(1-x)\)。
\[\begin{aligned}
Ans
& =\dbinom{n}{k} l \int_0^1 t^k (1-t)^{n-k} dx\\
& =\dbinom{n}{k} l \int_0^1 \sum\limits_{i=0}^{n-k} \dbinom{n-k}{i} (-1)^it^{i+k} dx\\
& =\dbinom{n}{k} l \int_0^1 \sum\limits_{i=0}^{n-k} \dbinom{n-k}{i} (-1)^i 2^{i+k} x^{i+k}(1-x)^{i+k} dx\\
& =\dbinom{n}{k} l \sum\limits_{i=0}^{n-k} \dbinom{n-k}{i} (-1)^i 2^{i+k} \int_0^1 x^{i+k}(1-x)^{i+k} dx\\
& =\dbinom{n}{k} l \sum\limits_{i=0}^{n-k} \dbinom{n-k}{i} (-1)^i 2^{i+k} \dfrac{(i+k)!^2}{(2i+2k+1)!}\\
\end{aligned}
\]
对每个 \(k\) 算出来后求和即可。
可以卷积优化,\(O(n \log n)\)。
问题 3 (P6130 随机红包)
- 在长度为 \(1\) 的线段上随机取 \(n-1\) 个点,求分割出的 \(n\) 段线段中第 \(k\) 短的长度期望。
假设问题是算第 \(k\) 长的线段长度期望。
考虑钦定 \(x \in [0,1]\),算 \(P(X \leq x)\)。
第 \(k\) 长 \(\leq x\),等价于恰好有 \(t\) 个 \(\geq x\),其中 \(t < k\)。
设 \(f_t\) 表示恰有 \(t\) 个 \(\geq x\) 的概率,\(g_t\) 表示钦定 \(t\) 个 \(\geq x\) 的概率。
\[g_t=\dbinom{n}{t}(1-tx)^{n-1}
\]
\[g_t=\sum\limits_{i \geq t} \dbinom{i}{t} f_i
\]
由二项式反演:
\[f_t=\sum\limits_{i \geq t} (-1)^{i-t} \dbinom{i}{t}g_i
\]
得到答案表达式:
\[\begin{aligned}
Ans
& =1-\int_0^1 \sum\limits_{t=0}^{k-1} \sum\limits_{i=t}^n [ix \leq 1] (-1)^{i-t}\dbinom{i}{t} \dbinom{n}{i} (1-ix)^{n-1} dx\\
& =1-\sum\limits_{t=0}^{k-1} \sum\limits_{i=t}^n [i>0] (-1)^{i-t}\dbinom{i}{t} \dbinom{n}{i} \int_0^{1/i} (1-ix)^{n-1} dx -1\\
& =-\sum\limits_{t=0}^{k-1} \sum\limits_{i=t}^n [i>0] (-1)^{i-t}\dbinom{i}{t} \dbinom{n}{i} \dfrac{1}{ni}\\
& =-\dfrac{1}{n} \sum\limits_{t=0}^{k-1} \sum\limits_{i=t}^n [i>0] (-1)^{i-t}\dbinom{i}{t} \dbinom{n}{i} \dfrac{1}{i}\\
\end{aligned}
\]
其中第二步是把 \(i=0\) 的情况单独拿出来。
接下来先把 \(t=0\) 的情况单独拿出来:
\[-\dfrac{1}{n} \sum\limits_{i=1}^n (-1)^{i} \dfrac{1}{i} \dbinom{n}{i} = - \dfrac{1}{n} S_n
\]
下面给出三种求法(参考 @ do_while_true 的题解 与 UOJ 群友给出的方法):
组合做法
如果不是 \(\frac{1}{i}\) 而是 \(\frac{1}{i+1}\),就可以直接吸收掉。
既然不能改变 \(\frac{1}{i}\),那能不能把组合数的下指标变成 \(i-1\) 呢?应用上指标求和:
\[\begin{aligned}
S_n &= \sum\limits_{i=1}^n (-1)^{i} \sum\limits_{j=0}^{n-1} \dbinom{j}{i-1} \dfrac{1}{i}\\
&= \sum\limits_{i=1}^n (-1)^{i} \sum\limits_{j=0}^{n-1} \dfrac{1}{j+1} \dbinom{j+1}{i}\\
&= \sum\limits_{j=0}^{n-1} \dfrac{1}{j+1} \sum\limits_{i=1}^n (-1)^{i} \dbinom{j+1}{i}\\
&= \sum\limits_{j=0}^{n-1} \dfrac{1}{j+1} (0-1)\\
&= -\sum\limits_{j=1}^{n} \dfrac{1}{j}\\
\end{aligned}
\]
代数做法(微积分)
\[\begin{aligned}
S_n &= \sum\limits_{i=1}^n (-1)^{i} \dbinom{n}{i} \int_0^1 t^{i-1} dt\\
&= \int_0^1 \dfrac{dt}{t} \sum\limits_{i=1}^n (-1)^{i} \dbinom{n}{i} t^{i}\\
&= \int_0^1 \dfrac{(1-t)^n-1}{t} dt\\
&=-\int_0^1 \dfrac{s^n-1}{1-s} ds,\text{with } s=1-t\\
&=\int_0^1 \sum\limits_{k=0}^{n-1} s^k ds\\
&= -\sum\limits_{k=1}^{n} \dfrac{1}{k}\\
\end{aligned}
\]
生成函数做法
\[\begin{aligned}
F(x) &= \sum\limits_{k \geq 0} S_k x^k\\
&= \sum\limits_{k \geq 0} \sum\limits_{i=1}^k (-1)^{i} \dfrac{1}{i} \dbinom{k}{i} x^k\\
&= \sum\limits_{i \geq 1} (-1)^{i} \dfrac{1}{i} \sum\limits_{k \geq i} \dbinom{k}{i} x^k\\
&= \sum\limits_{i \geq 1} (-1)^{i} \dfrac{1}{i} \dfrac{x^i}{(1-x)^{i+1}}\\
&= \dfrac{1}{1-x} \sum\limits_{i \geq 1} \dfrac{[-x/(1-x)]^i}{i}\\
&= -\dfrac{1}{1-x} \ln(1+\dfrac{x}{1-x})\\
&= \dfrac{\ln(1-x)}{1-x}\\
&=- \big(\sum\limits_{i \geq 0} x^i \big) \big(\sum\limits_{j \geq 1} \dfrac{x^j}{j} \big)
\end{aligned}
\]
\[S_n(x)=[x^n]F(x)= -\sum\limits_{j=1}^n \dfrac{1}{j}
\]
回到原题。
交换和号可以得到另一个结果,但是这里把 \(\dbinom{i}{t}\) 用释放公式可以得到更简单的结果(感谢 @AThousandMoon 提醒):
\[\begin{aligned}
Ans
& =-\dfrac{1}{n} \sum\limits_{t=1}^{k-1} \sum\limits_{i=t}^n (-1)^{i-t} \dfrac{1}{i} \dbinom{i}{t} \dbinom{n}{i}-\dfrac{1}{n} S_n\\
& =-\dfrac{1}{n} \sum\limits_{t=1}^{k-1} \sum\limits_{i=t}^n (-1)^{i-t} \dfrac{1}{t} \dbinom{i-1}{t-1} \dbinom{n}{i}+\dfrac{1}{n} \sum\limits_{i=1}^n \dfrac{1}{i}\\
& =-\dfrac{1}{n} \sum\limits_{t=1}^{k-1} \dfrac{1}{t} \sum\limits_{i=t}^n (-1)^{i-t} \dbinom{i-1}{t-1} \dbinom{n}{i}+\dfrac{1}{n} \sum\limits_{i=1}^n \dfrac{1}{i}\\
& =-\dfrac{1}{n} \sum\limits_{t=1}^{k-1} \dfrac{1}{t} \sum\limits_{i=0}^{n-t} (-1)^{i} \dbinom{i+t-1}{t-1} \dbinom{n}{n-i-t}+\dfrac{1}{n} \sum\limits_{i=1}^n \dfrac{1}{i}\\
& =-\dfrac{1}{n} \sum\limits_{t=1}^{k-1} \dfrac{1}{t} \sum\limits_{i=0}^{n-t} ([x^{i}]\dfrac{1}{(1+x)^t}) ([x^{n-i-t}](1+x)^n)+\dfrac{1}{n} \sum\limits_{i=1}^n \dfrac{1}{i}\\
& =-\dfrac{1}{n} \sum\limits_{t=1}^{k-1} \dfrac{1}{t} [x^{n-t}] (1+x)^{n-t}+\dfrac{1}{n} \sum\limits_{i=1}^n \dfrac{1}{i}\\
& =\dfrac{1}{n} (\sum\limits_{i=1}^n \dfrac{1}{i}- \sum\limits_{t=1}^{k-1} \dfrac{1}{t})\\
& =\dfrac{1}{n} \sum\limits_{i=k}^n \dfrac{1}{i}
\end{aligned}
\]
\(O(n-k)\)。原问题即为 \(O(k)\)。