首页 > 技术文章 > 概率生成函数

lhm- 2021-01-13 09:45 原文

概念

\(X\) 为非负整数集 \(\mathbb{N}\) 上的离散随机变量,其满足 \(\text{Pr}(X=i)=a_i\),则称 \(a_n\ (n \in \mathbb{N})\) 的生成函数为 \(X\) 的概率生成函数,得:

\[\large F(z)=\mathbb E(z^X)=\sum_{i=0}^\infty \text{Pr}(X=i)z^i \]

因为 \(X\) 为非负整数集 \(\mathbb{N}\) 上的离散随机变量,所以有:

\[\large F(1)=\sum_{i=0}^\infty \text{Pr}(X=i)=1 \]

\(F(z)\) 求导,得:

\[\large {F}'(z)=\sum_{i=0}^\infty i\text{Pr}(X=i)z^{i-1} \]

\(X\) 的期望为:

\[\large E(X)={F}'(1)=\sum_{i=0}^\infty i\text{Pr}(X=i) \]

\(X\) 的方差为:

\[\large \large Var(X)={F}''(1)+{F}'(1)-({F}'(1))^2 \]

应用

[CTSC2006] 歌唱王国

给定长为 \(m\) 的序列 \(A\),每次等概率随机一个 \(1\)\(n\) 的数加到初始为空的序列 \(B\) 的末尾,当 \(A\)\(B\) 的子串时,停止随机,求序列 \(B\) 的期望长度。链接

\(m \leqslant 10^5\)

\(f_i\)\(B\) 长度为 \(i\) 时停止的概率,\(g_i\)\(B\) 长度为 \(i\) 时未停止的概率,分别得概率生成函数 \(F(x)\) 和普通生成函数 \(G(x)\),所求即为 \({F}'(1)\)

\(a_i\) 表示 \(A[1,i]\) 是否为 \(A\)\(\text{border}\),其取值为 \(0\)\(1\),得:

\[\large\begin{aligned} xG(x)+1&=F(x)+G(x) \\ G(x)\left( \frac{1}{n}x \right)^m&=\sum_{i=1}^ma_iF(x)\left( \frac{1}{n}x \right)^{m-i} \end{aligned} \]

第一个式子为未停止时往后加一个数字,其可能停止,也可能未停止,加 \(1\)\(B\) 为空的情况。第二个式子是向未停止的序列 \(B\) 直接加上序列 \(A\),其一定会停止,但发现不一定要全部加上序列 \(A\),这里还需考虑 \(\text{border}\)

对第一个式子求导并代入 \(x=1\) 得:

\[\large\begin{aligned} G(x)+x{G}'(x)&={F}'(x)+{G}'(x) \\ {F}'(1)&=G(1) \\ \end{aligned} \]

\(x=1\) 代入第二个式子得:

\[\large\begin{aligned} G(1)\left( \frac{1}{n} \right)^m&=\sum_{i=1}^ma_iF(1)\left( \frac{1}{n}\right)^{m-i} \\ G(1)&=\sum_{i=1}^ma_in^i \\ \end{aligned} \]

因此有 \({F}'(1)=\sum\limits_{i=1}^ma_in^i\),用 \(KMP\) 即可 \(O(m)\) 求解。

[SDOI2017] 硬币游戏

给定 \(n\) 个长度为 \(m\)\(01\) 序列 \(A_i\),序列互不相同,每次等概率随机 \(0\)\(1\) 加到初始为空的序列 \(B\) 的末尾,当有 \(A_i\)\(B\) 的子串时停止,对于每个 \(i\) 求出因其停止的概率。链接

\(1 \leqslant n, m \leqslant 300\)

\(f_{i,j}\)\(B\) 长度为 \(j\) 时因 \(i\) 停止的概率,\(g_i\)\(B\) 长度为 \(i\) 时未停止的概率,分别得概率生成函数 \(F_i(x)\) 和普通生成函数 \(G(x)\),所求即为 \(F_i(1)\)

\(a_{i,j,k}\) 表示 \(A_i\) 长度为 \(k\) 的前缀是否和 \(A_j\) 长度为 \(k\) 的后缀相等,其取值为 \(0\)\(1\),得:

\[\large G(x)\left( \frac{1}{2}x \right)^m=\sum_{j=1}^n\sum_{k=1}^ma_{i,j,k}F_j(x)\left( \frac{1}{2}x \right)^{m-k} \]

和上一题一样,化简得:

\[\large \large G(1)=\sum_{j=1}^n\sum_{k=1}^ma_{i,j,k}F_j(1)2^k \]

注意到:

\[\large \sum_{i=1}^n F_i(1)=1 \]

用高斯消元即可 \(O(n^3)\) 求解。

推荐阅读