基本搬運自《淺談生成函數在擲骰子問題上的應用》。
對於定義在非負整數上的離散隨機變量 \(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\) 之后的情況:
其中第二個等式是由於我們可以從 border 處開始匹配。
將等式 \((1)\) 求導並代入 \(z=1\),得到
將 \(z=1\) 代入等式 \((2)\) 中可得
其中用到了 \(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]\) 相同。考慮隨機加入一個字符,和加入一個目標串:
我們的目標是求每個 \(F_i(1)\)。照例求導並代入 \(z=1\):
這樣我們得到了關於 \(F_i(1)\) 和 \(G(1)\) 一共 \(n+1\) 個未知數的 \(n\) 個方程。發現 \(\sum\limits_{i=1}^nF_i(x)\) 即為隨機序列長度的 PGF,於是得到最后一個方程
高斯消元即可。