概率生成函数(PGF)简记

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

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

一些性质

F(1)=i0Pr(X=i)=1

显然。

F(1)=i0iPr(X=i)=E(X)

显然。类似的可以得出 F(k)(1)=E(xk_)

F(1)+F(1)(F(1))2=(i0i2Pr(X=i))(i0iPr(X=i))2=σ2(X)

其中 σ2(X) 表示 X 的方差,定义为 σ2(X)=E((xE(x))2)=E(x2)E2(x)。这一条不常用到。

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


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

[CTSC2006]歌唱王国

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

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

(1)F(z)+G(z)=zG(z)+1(2)G(z)(zm)L=i=1LaiF(z)(zm)Li

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

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

(3)F(z)+G(z)=zG(z)+G(z)(4)F(1)=G(1)

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

(5)G(1)(1m)L=i=1LaiF(1)(1m)Li(6)G(1)=i=1Laimi

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

[SDOI2017]硬币游戏]

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

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

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

(7)G(z)+i=1nFi(z)=zG(z)+1(8)i[1,n], G(z)(zm)li=j=1nk=1ljai,j,kFj(z)(zm)Lk

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

(9)i=1nFi(1)=G(1)(10)i[1,n], G(1)(1m)li=j=1nk=1ljai,j,kFj(1)(1m)ljk

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

i=1nFi(x)=1

高斯消元即可。

posted @   Aphrosia  阅读(1543)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示