2023.9.30 闲话

推歌:Sleep Talk Metropolis - Mili .

欢迎大家来看 Azune FFT!!!!


记几个 PGF 问题 .

原论文:《浅谈生成函数在掷骰子问题上的应用》杨懋龙 .

概率生成函数(PGF):

F(z)=E(zX)=i0P(X=i)zi

根据定义可以得到 k 阶阶乘矩 E(Xk_)=F(k)(1) .

进而可以推得方差:Var(X)=F(1)+F(1)F(1)2 .

Problem 1

给一个序列 {an},序列 {b} 初始为空,每次生成一个 1m 的均匀随机整数并加入序列 {b} 末尾,当 ab 的子串时停止,问 {b} 的期望长度 .

n105 .

为了方便先令 pi 表示 a[1:i] 是否是 a 的一个 border .

fi 为结束时长度为 i 的概率,gi 为到长度为 i 还未结束的概率,其 PGF 分别为 F(z),G(z),则:

F(z)+G(z)=1+zG(z)G(z)(zm)n=i=1npiF(z)(zm)ni

对上式求导并代入 z=1 可得 F(1)=G(1) .

对下式代入 z=1 可得 G(1)=i=1npimi .

那么即可在 Θ(n) 的时间复杂度内求得 F(1),即答案 .

Problem 1.5

Problem 1,但是求结束时 {b} 长度的 k 阶阶乘矩 .

n,k103 .

从推出两个表达式开始做,对上式求 k 阶导并代入 z=1 可得 F(k)(1)=kG(k1)(1) .

对下式求 k1 阶导并代入 z=1 可得:

G(k1)(1)=i=1npimij=0k1(1)j(k1j)(i+j1)j+1_F(kj1)(1)

综合,即得:

F(k1)(1)=ki=1npimij=0k1(1)j(k1j)(i+j1)j_F(kj1)(1)

于是得到一个线性递推,可以通过各式方法求解 .

Problem 2

给一簇序列 a1n,长度分别为 l1n . 序列 {b} 初始为空,每次生成一个 1m 的随机整数(生成 i 的概率为 p(i))并加入序列 {b} 末尾,当 a1n 都是 b 的子串时停止,问 {b} 的期望长度 .

n15li2×104m105 .

首先把相互包含的 a 删掉 .

使用 min-max 容斥,转为计算有一个出现就结束的答案 .

为了方便,令 p(S)=iSp(i)ti,j,k=[ai[i:k]=aj[ljk+1;lj]] .

fi,j 为结束时出现 ai 长度为 j 的概率,gi 为到长度为 i 还未结束的概率,其 PGF 分别为 Fi(z),G(z),则:

i=1nFi(z)+G(z)=1+zG(z)G(z)p(ai)zli=j=1nk=1liti,j,kFj(z)p(ai[k+1,li])zlik

对上式求导并代入 z=1 可得 i=1nFi(1)=G(1) .

对下式代入 z=1 可得:

G(1)=j=1nFj(1)k=1liti,j,kp(Ai[1:k])

i=1nFi(1)=1 联立,Gauss 消元即可求出每个 Fi(1) .

所以本问题可以基于 Hash 做到 Θ(nli+2nn3) 的时间复杂度 .

Problem 3

有一个初始为空的序列 {a},每次生成一个 1m 的均匀随机整数并加入 {a} 末尾,出现一个长度为 n 的全相同 / 全不同的子串时结束,问结束时 {a} 的期望长度 .

n,m106 . 保证过程能够期望在有限步内结束 .

传统做法也不是很难,下面给出 PGF 做法:

第一问

fi 为结束时长为 i 的概率,gi 为长为 i 没结束的概率,其 PGF 分别为 F(z),G(z),则:

F(z)+G(z)=1+zG(z)G(z)(zm)n1=i=1nF(z)(zm)ni

后面的过程和前几题类似,最终可以得到 F(1)=mn1m1 .

第二问

fi 为结束时长为 i 的概率,gi 为长为 i 没结束的概率,其 PGF 分别为 F(z),G(z),则:

F(z)+G(z)=1+zG(z)G(z)(zm)nmn_=i=1nF(z)(zm)ni(mi)ni_

最终 F(1)=i=1nmimi_ .

Problem 4

有一个初始为空的序列 {a},每次生成一个 1n 的均匀随机整数并加入 {a} 末尾,出现一个长度为 n 的全是偶数的子串时结束,问结束时 {a} 的期望长度 .

n109 . 保证 n 是偶数 .

这个题和前面几个不太一样 .

fi 为结束时长为 i 的概率,gi 为出现一个长为 i 的全偶后缀的概率,其 PGF 分别为 F(z),G(z),则:

F(z)+G(z)=G(z)z2+G(1)2+1F(z)=G(z)zn

将后式代入前式可得:

G(z)(1+znz2)=n2+1

最终解出来可以得到 F(1)=2nn+2 .

posted @   yspm  阅读(62)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
😅​
点击右上角即可分享
微信分享提示