专栏文章

概率生成函数PGF

算法·理论参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minjkttk
此快照首次捕获于
2025/12/02 03:28
3 个月前
此快照最后确认于
2025/12/02 03:28
3 个月前
查看原文
对于离散的概率生成函数
fX(x)=kP(X=k)xkE(X)=kkP(X=k)=fX(1)E(X2)=kk2P(X=k)=k[k(k1)+k]P(X=k)=fX(1)+fX(1)\begin{aligned} f_X(x) &= \sum_{k} P(X=k)x^{k} \\ E(X) &= \sum_{k}k\cdot P(X=k) = f'_{X}(1) \\ E(X^2) &= \sum_{k} k^{2}P(X=k) = \sum_{k}[k(k - 1) + k]P(X=k) = f''_{X}(1) + f'_{X}(1) \end{aligned}
考虑怎么求 E(xn)E(x^{n}),由于
fX(ex)=kP(X=k)ekx=kP(X=k)n(kx)nn!=nxnn!kP(X=k)kn=nE(Xn)n!xn\begin{aligned} f_{X}(e^{x}) &= \sum_{k}P(X=k)e^{kx} \\ &= \sum_{k}P(X=k)\sum_{n}\frac{(kx)^n}{n!} \\ &= \sum_{n}\frac{x^{n}}{n!}\sum_{k} P(X=k)k^{n} \\ &= \sum_{n}\frac{E(X^{n})}{n!}x^{n} \end{aligned}
这称为随机变量 XX 的矩母函数,由此可见 E(xn)=n![xn]fX(ex)E(x^{n}) = n![x^{n}]f_{X}(e^{x}),考虑怎么求 fX(ex)f_X(e^{x}) 的各项系数。
fX(x)f_{X}(x) 是无限项的,需要求其封闭形式;若 fX(x)f_{X}(x) 是有限项的,考虑求
nE(Xn)xn=nkP(X=k)knxn=nkfkknxn=kfkn(kx)n=kfk1kx\begin{aligned} \sum_{n}E(X^{n})x^{n} &= \sum_{n}\sum_{k} P(X=k)k^{n}x^{n} \\ &= \sum_{n}\sum_{k}f_{k}k^{n}x^{n} \\ &= \sum_{k}f_{k}\sum_{n}(kx)^{n} \\ &= \sum_{k} \frac{f_{k}}{1 - kx} \end{aligned}
使用分治 FFT 维护分子分母,最后多项式求逆即可求出,时间复杂度 O(nlog2n)O(n\log^{2}n)
下面我们来一道例题,一个歌唱王国的加强版。
  • 字符集为 Σ\Sigma,打出第 ii 个字符的概率为 pip_{i},给出一个字符串 ss,求后缀第一次出现字符串 ss 的期望打字次数 E(s)E(s)
fkf_{k} 代表打了 kk 个字符还没停的概率,gkg_k 代表打了 kk 个字符恰好停的概率。
由于 fk=j=k+1gj=fk+1+gk+1f_{k} = \sum_{j=k+1}g_{j} = f_{k + 1} + g_{k + 1},即
1+xf(x)=f(x)+g(x)      (1)\begin{aligned} 1 + xf(x) = f(x) + g(x)\ \ \ \ \ \ (1) \end{aligned}
考虑打了 pp 个字符还没停,并且钦定在后面完整地打出一个字符串 tt 的概率,用两种不同的形式表达,即
fpi=1tpti=kborder(t)gp+ki=k+1tpti\begin{aligned} f_{p} \prod_{i = 1}^{|t|}p_{t_{i}} = \sum_{k\in \text{border}(t)} g_{p+k}\prod_{i = k + 1}^{|t|}p_{t_{i}} \end{aligned}
写成生成函数的形式,即
f(x)xti=1tpti=g(x)kborder(t)xtki=k+1tpti     (2)\begin{aligned} f(x)\cdot x^{|t|}\prod_{i=1}^{|t|}p_{t_{i}} = g(x) \sum_{k\in \text{border}(t)} x^{|t|-k}\prod_{i=k+1}^{|t|}p_{t_{i}} \ \ \ \ \ (2) \end{aligned}
(1)(1) 式带入 (2)(2) 式中,化简可得
g(x)=i=1tpti(1x)kborder(t)xki=k+1tpti+i=1tpti\begin{aligned} g(x) = \frac{\prod\limits_{i=1}^{|t|}p_{t_{i}}}{(1-x)\sum\limits_{k\in \text{border(t)}}x^{-k}\prod\limits_{i=k+1}^{|t|}p_{t_i} + \prod_{i=1}^{|t|}p_{t_{i}}} \end{aligned}
求导带入 x=1x=1 即可得到
E(s)=g(1)=kborder(t)i=1k1pti\begin{aligned} E(s) = g'(1) = \sum\limits_{k\in \text{border}(t)}\prod_{i=1}^{k}\frac{1}{p_{t_{i}}} \end{aligned}

评论

0 条评论,欢迎与作者交流。

正在加载评论...