【学习笔记】概率生成函数
概述
用生成函数刻画一些困难的概率期望问题,使用一些朴素的数学技巧来解出答案。
设 \(F(x)\) 为概率生成函数,定义为:
\[F(x)=\sum_{i\ge 0}P(X=i)x^i
\]
容易发现 \(F(1)=1\)。
将 \(F(x)\) 求导得到:
\[F'(x)=\sum_{i\ge 0}iP(X=i)x^{i-1}
\]
容易发现 \(E(X)=F'(1)=1\)。
同时根据高中数学知识可以得到:
\[\begin{aligned}
Var(X)&=\sum_{i\ge 0}(i-E(X))^2P(X=i)\\
&=\sum_{i\ge 0}i^2P(X=i)-2iE(X)P(X=i)+E(X)^2P(X=i)\\
&=\sum_{i\ge 0}i^2P(X=i)-E(X)^2
\end{aligned}\]
而 \(F(x)\) 的二阶导:
\[F''(x)=\sum_{i\ge 0}i(i-1)P(X=i)x^{i-2}
\]
于是 \(Var(X)=F'(1)+F''(1)-(F'(1))^2\)。
例题
Luogu-P4548 CTSC 2006 歌唱王国
设 \(f_i\) 表示在长度为 \(i\) 时完成的概率,\(g_i\) 表示在长度为 \(i\) 时尚未完成的概率,记 \(F(x),G(x)\) 为 \(f,g\) 的生成函数,结合常数项 \(f_0=0,g_0=1\) 可以得到:
\[F(x)+G(x)=xG(x)+1
\]
考虑将一个未完成的串后面直接接上目标串,此时可能出现没有完全接完就已经完成了的情况(原来就有一部分前缀),已经接上的部分既是前缀也是后缀,即 \(\mathrm{border}\),剩下的部分就浪费了,所以可以写成:
\[\dfrac{x^LG(x)}{m^{|s|}}=\sum_{i=1}^{|s|} \dfrac{x^{|s|-i}F(x)}{m^{|s|-i}}[s[1,i]\in\mathrm{Border}(s)]
\]
因为要求 \(F'(1)\),所以对第一个式子求导,得到:
\[F'(x)+G'(x)=G(x)+G'(x)
\]
所以 \(F'(1)=G(1)\),再把 \(x=1\) 代入第二个式子。
\[G(1)=\sum_{i=1}^{|s|}m^i[s[1,i]\in\mathrm{Border}(s)]
\]
所以答案就是 \(m\) 的所有 \(\mathrm{border}\) 次幂之和。
可见 PGF 解决问题的流程大致是设计一些数列的概率生成函数或普通生成函数,联立方程,求导,并将 \(x=1\) 代入解决问题,上面部分已经阐明 \(x=1\) 时的值有许多特殊之处。
P.S:伟大 APJ 指出,\(F(x)\) 满足 \(F(1)=1\),但是 \(G(x)\) 不满足,所以只有 \(F(x)\) 是概率生成函数。
参考资料
- 《浅谈生成函数在掷骰子问题上的应用》 - 杨懋龙