概率生成函数
定义
若 (X) 为仅取非负整数值的随机变量,那么 (X) 的概率生成函数(probability generating function,PGF) 为
显然 (G_X(z)) 的各项系数非负,且其和为 (1)。这个条件可以写成
同样,反过来,任何具有非负系数且满足 (G(1)=1) 的幂级数 (G(z)) 都是某个随机变量的生成函数。
均值与方差
概率生成函数最大的长处是其可以大大简化均值与方差的计算。
均值
根据这个推导式我们可以进一步推出
然后应该可以通常幂转下降幂之类的东西搞事情
方差
这告诉我们,若我们知道 (G_{X}'(1)) 与 (G_{X}''(1)) 的值,我们就能够求出均值与方差。我们甚至不需要知道 (G_X(z)) 本身的封闭形式。
乘积
概率生成函数的乘积对应于独立随机变量之和。例如,设 (X) 与 (Y) 是只取整数变量的随机变量,且相互独立,那么显然有
这显然是一个卷积,即
例题
「CTSC2006」歌唱王国
给定一个长度为 (L) 的序列 (A),每次从 ([1,m]) 中等概率选取一个整数加入到初始为空的序列 (B) 的末尾。若 (operatorname{LCS}(A,B)=A),则停止。求序列 (B) 的期望长度。
令 (f_i) 为结束时序列 (B) 长度为 (i) 的概率,其概率生成函数为 (F(z))。
令 (g_i) 为序列 (B) 长度为 (i) 且还未结束的概率,其普通生成函数为 (G(z))。
令 (a_i) 为序列 (A[1,i]) 是否为一个序列的 ( exttt{border})。
容易发现我们的答案即为 (F'(1))
则有
第一个式子的意义为在一个未结束的序列后面添加一个数,有可能结束也有可能为结束,(1) 表示初始状态一定没有结束。
第二个式子的意义为在一个未结束的序列后面添加序列 (A),则一定会结束。但有可能尚未添加完所有字符就已经结束,这种情况仅可能发生在已添加的序列为给定序列的一个 ( exttt{border})。我们可以枚举此时序列的长度,然后再乘上多余字符的概率。
对第一个式子求导,有
代入 (z=1) 有
所以我们可以考虑求出 (G(1))。
将 (z=1) 代入第二个式子有
然后 (a_i) 大家都会求,然后这个题就做完了。
根据类似的方法求出 (F''(z)) 可以求出方差。
我们考虑加强这个问题。
给定 (n) 个序列 (A_1,A_2,cdots A_n),第 (i) 个序列的长度为 (L_i)。每次从 ([1,m]) 中以 (p_i) 的概率生成一个数 (i) 加入初始为空的序列 (B) 末尾,若 (A_1,A_2,cdots A_n) 均为 (B) 的子串则停止。求序列 (B) 的期望长度。
类似刚才的问题,我们可以设 (T_i) 为 (A_i) 在 (B) 中首次出现的期望长度,则答案为 (max_{i=1}^{n} T_i)。
这个东西看着就非常不爽,所以可以考虑 (min-max) 容斥得到答案为 (sum_{Ssubseteq{1,2,cdots n}}(-1)^{|S|+1}min_{iin S}T_i)。
根据期望的线性性,可以转化为求 (E(min_{iin S}T_i)),即出现一个就结束,不妨设 (S={1,2,cdots n})。
然后我们可以仿照前面的定义:
令 (f_{i,j}) 为序列 (B) 中出现的是 (A_i),且长度为 (j) 的概率,其普通生成函数为 (F_i(z))。
令 (g_i) 为序列 (B) 长度为 (i) 且还未结束的概率,其普通生成函数为 (G(z))。
令 (a_{i,j,k}=[A_i[1,k]=A_j[L_j-k+1,L_j]])。
令 (P(T)=prod_{iin T}p_i)。
则有
要求的即是 (sum_{i=1}^{n}F'_i(1))。
仿照之前的方法将 (z=1) 代入可以得到 (n) 个方程,同时注意到 (sum_{i=1}^{n}F_i(1)=1),即可高斯消元求解。
「2013 Multi-University Training Contest 5」 Dice
一个 (m) 面的公平骰子,求最后 (n) 次结果相同就结束的期望次数或者求最后 (n) 次结果全不同就结束的期望次数。
令 (f_i) 为掷了 (i) 次结束的概率,其概率生成函数为 (F(z))。
令 (g_i) 为掷了 (i) 次还未结束的概率,其普通生成函数为 (G(z))。
先看第一问。
那么显然有
(这里好像和论文不太一样?可能是我的问题。反正不影响结果)
代入 (z=1),可得 (G(1)=sum_{i=1}^{n}m^{i-1})。
意义和之前的题目差不多。
然后看第二问。
那么显然有
代入 (z=1),可得 (G(1)=sum_{i=1}^nfrac{(m-i)!}{m!}m^{i})。
一个有趣的概率小问题
一个 (n) 面的骰子,每一面标号 (1) 到 (n) 。有个初始为 (0) 的计数器,每次扔骰子,如果结果是奇数,那么计数器清零,否则计数器加 (1) 并且如果结果是 (n) 则结束。问结束时计数器的期望。保证 (n) 是偶数。
根据套路
令 (f_i) 为计数器为 (i) 时结束的概率,其概率生成函数为 (F(z))。
令 (g_i) 为计数器为 (i) 时未结束的概率,其普通生成函数为 (G(z))。
(为啥感觉这里又和论文不太一样啊...我一定是又蠢了)
第一个式子的意义是我们从未结束时掷骰子可能会有两种情况:
- 有 (frac 1 2) 的概率掷出奇数,此时不管当前计数器的值为多少全部都会变到计数器为零且未结束的状态,这一部分的概率即 (frac 1 2G(1))。
- 有 (frac 1 2) 的概率掷出偶数,此时有可能结束也有可能没结束。
- (1) 表示初始状态一定没有结束。
第二个式子的意义是我们从一个未结束的状态多掷一步 (n) 则一定会结束。
将 (z=1) 代入第二个式子易得 (G(1)=n),将其代入第一个式子有
将 (G(z)frac 1 nz=F(z)) 代入第一个式子有
于是有
具体数学 8.43
求 (n) 个数的随机排列的轮换的个数的期望。
首先可以设 (f_{n,k}) 为 (n) 个数的排列,有 (k) 个轮换的概率,其概率生成函数为 (F_n(z))。
显然有
然后你发现这是一堆二项概率生成函数的乘积,每一项的期望为 (frac 1 k)。
显然这一堆互相独立,所以实际上总的期望就是 (H_n),即调和级数。