概率生成函数(PGF)简记

基本搬运自《浅谈生成函数在掷骰子问题上的应用》。

对于定义在非负整数上的离散随机变量 \(X\),级数 \(F(z) = \sum\limits_{i\ge 0} \operatorname{Pr}(X=i) z^i\) 记为 \(X\) 的概率生成函数(PGF),本质上是有特殊性质的普通型生成函数。概率生成函数在一方面提供了一种刻画概率相关模型的工具,另一方面比较形式化地总结了一类概率问题的一般性思路。

一些性质

\(F(1) = \sum\limits_{i\ge 0} \operatorname{Pr}(X=i) = 1\)

显然。

\(F^{\prime}(1) = \sum\limits_{i\ge 0} i\operatorname{Pr}(X=i) = E(X)\)

显然。类似的可以得出 \(F^{(k)}(1) = E(x^{\underline{k}})\)

\(F^{\prime\prime}(1) + F^{\prime}(1) - (F^{\prime}(1))^2 = \bigg(\sum\limits_{i\ge 0}i^2\operatorname{Pr}(X=i)\bigg) - \bigg(\sum\limits_{i\ge 0} i\operatorname{Pr}(X=i)\bigg)^2 = \sigma^2(X)\)

其中 \(\sigma^2(X)\) 表示 \(X\) 的方差,定义为 \(\sigma^2(X) = E\big((x-E(x))^2\big)=E(x^2)-E^2(x)\)。这一条不常用到。

这一类性质基本在期望问题时用到,核心思路是利用题目性质列出 PGF 或其导数的方程,代入 \(z=1\) 解出得到答案。


论文涉及了许多例题,但本质基本相同,只要理解了方法也不难独立推导出。在这里记录一些比较有代表性的题目。

[CTSC2006]歌唱王国

给定一个长度为 \(L\) 的序列 \(A\)。然后每次掷一个标有 \(1\)\(m\) 的公平骰子并将其上的数字加入到初始为空的序列 \(B\) 的末尾,如果序列 \(B\) 中已经出现了给定序列 \(A\) ,即 \(A\)\(B\) 的子串,则停止,求序列 \(B\) 的期望长度。

\(a_i\) 表示 \([1,i]\)\(A\) 的 border。记 \(f_i,g_i\) 表示 \(B\) 长度为 \(i\) 时,过程结束/未结束的方案数,其 PGF 分别为 \(F(z),G(z)\)。考虑随机加入一个字符,和钦定加入序列 \(A\) 之后的情况:

\[\begin{align} F(z) + G(z) &= zG(z)+1 \\ G(z)\bigg(\dfrac{z}{m}\bigg)^L &= \sum\limits_{i=1}^{L}a_iF(z)\bigg(\dfrac{z}{m}\bigg)^{L-i} \end{align} \]

其中第二个等式是由于我们可以从 border 处开始匹配。

将等式 \((1)\) 求导并代入 \(z=1\),得到

\[\begin{align} F^{\prime}(z) + G^{\prime}(z) &= zG^{\prime}(z) + G(z) \\ F^{\prime}(1) &= G(1) \end{align} \]

\(z=1\) 代入等式 \((2)\) 中可得

\[\begin{align} G(1)\bigg(\dfrac{1}{m}\bigg)^L &= \sum\limits_{i=1}^{L}a_iF(1)\bigg(\dfrac{1}{m}\bigg)^{L-i} \\ G(1) &= \sum\limits_{i=1}^La_im^i \end{align} \]

其中用到了 \(F(1)=1\)。至此我们已经可以高效且简洁的计算答案了。

[SDOI2017]硬币游戏]

给定 \(n\) 个长度分别为 \(L_i\) 的序列 \(A_i\),保证每个序列互不相同。再给出一个标有 \(1\)\(m\) 的骰子,其中抛出 \(i\) 的概率为 \(P_i\)。然后每次抛一次骰子将骰子上的数字加入到初始为空的序列 \(B\) 末尾,如果给定的 \(n\) 个序列的其中一个是 \(B\) 的子串,则停止,这个序列获胜。求每个序列获胜的概率,并求结束时 \(B\) 长度的期望。

较原题有所改动,不影响解题。

上一题的拓展。类似上一题的思路,记 PGF \(F_i(z),G(z)\) 分别表示第 \(i\) 个串长度为 \(i\) 时获胜的 PGF、长度为 \(i\) 时未结束的 PGF,\(b_{i,j,k}\) 表示第 \(j\) 个串的 \([1,k]\) 和第 \(i\) 个串的 \([l_i-k+1,l_i]\) 相同。考虑随机加入一个字符,和加入一个目标串:

\[\begin{align} G(z)+\sum\limits_{i=1}^n F_i(z) &= zG(z)+1 \\ \forall i \in [1,n],\ G(z)\bigg(\dfrac{z}{m}\bigg)^{l_i} &= \sum\limits_{j=1}^{n}\sum\limits_{k=1}^{l_j}a_{i,j,k}F_j(z)\bigg(\dfrac{z}{m}\bigg)^{L-k} \end{align} \]

我们的目标是求每个 \(F_i(1)\)。照例求导并代入 \(z=1\)

\[\begin{align} \sum\limits_{i=1}^n{F_i}^{\prime}(1) &= G(1) \\ \forall i \in [1,n],\ G(1)\bigg(\dfrac{1}{m}\bigg)^{l_i} &= \sum\limits_{j=1}^{n}\sum\limits_{k=1}^{l_j}a_{i,j,k}F_j(1)\bigg(\dfrac{1}{m}\bigg)^{l_j-k} \end{align} \]

这样我们得到了关于 \(F_i(1)\)\(G(1)\) 一共 \(n+1\) 个未知数的 \(n\) 个方程。发现 \(\sum\limits_{i=1}^nF_i(x)\) 即为随机序列长度的 PGF,于是得到最后一个方程

\[\sum\limits_{i=1}^nF_i(x) = 1 \]

高斯消元即可。

posted @ 2022-04-17 10:38  Aphrosia  阅读(1266)  评论(0编辑  收藏  举报