概率生成函数

1|0概念

X 为非负整数集 N 上的离散随机变量,其满足 Pr(X=i)=ai,则称 an (nN) 的生成函数为 X 的概率生成函数,得:

F(z)=E(zX)=i=0Pr(X=i)zi

因为 X 为非负整数集 N 上的离散随机变量,所以有:

F(1)=i=0Pr(X=i)=1

F(z) 求导,得:

F(z)=i=0iPr(X=i)zi1

X 的期望为:

E(X)=F(1)=i=0iPr(X=i)

X 的方差为:

Var(X)=F(1)+F(1)(F(1))2

2|0应用

2|1[CTSC2006] 歌唱王国

给定长为 m 的序列 A,每次等概率随机一个 1n 的数加到初始为空的序列 B 的末尾,当 AB 的子串时,停止随机,求序列 B 的期望长度。链接

m105

fiB 长度为 i 时停止的概率,giB 长度为 i 时未停止的概率,分别得概率生成函数 F(x) 和普通生成函数 G(x),所求即为 F(1)

ai 表示 A[1,i] 是否为 Aborder,其取值为 01,得:

xG(x)+1=F(x)+G(x)G(x)(1nx)m=i=1maiF(x)(1nx)mi

第一个式子为未停止时往后加一个数字,其可能停止,也可能未停止,加 1B 为空的情况。第二个式子是向未停止的序列 B 直接加上序列 A,其一定会停止,但发现不一定要全部加上序列 A,这里还需考虑 border

对第一个式子求导并代入 x=1 得:

G(x)+xG(x)=F(x)+G(x)F(1)=G(1)

x=1 代入第二个式子得:

G(1)(1n)m=i=1maiF(1)(1n)miG(1)=i=1maini

因此有 F(1)=i=1maini,用 KMP 即可 O(m) 求解。

2|2[SDOI2017] 硬币游戏

给定 n 个长度为 m01 序列 Ai,序列互不相同,每次等概率随机 01 加到初始为空的序列 B 的末尾,当有 AiB 的子串时停止,对于每个 i 求出因其停止的概率。链接

1n,m300

fi,jB 长度为 j 时因 i 停止的概率,giB 长度为 i 时未停止的概率,分别得概率生成函数 Fi(x) 和普通生成函数 G(x),所求即为 Fi(1)

ai,j,k 表示 Ai 长度为 k 的前缀是否和 Aj 长度为 k 的后缀相等,其取值为 01,得:

G(x)(12x)m=j=1nk=1mai,j,kFj(x)(12x)mk

和上一题一样,化简得:

G(1)=j=1nk=1mai,j,kFj(1)2k

注意到:

i=1nFi(1)=1

用高斯消元即可 O(n3) 求解。


__EOF__

本文作者lhm_
本文链接https://www.cnblogs.com/lhm-/p/14270479.html
关于博主:sjzez 的一名 OI 学生
版权声明:转载标明出处
声援博主:希望得到宝贵的建议
posted @   lhm_liu  阅读(449)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示