概率生成函数

概率生成函数

认识概率生成函数,形如

f(x)=i=0+P(X=i)xi

也就是 i 次项的系数是随机变量 X 等于 i 的概率。

这个东西有两个用处:

1 关于概率

f(1)=1 其实就是把 f(x) 的所有系数加起来,而这里的系数就是概率

2 关于期望

想一想,上面的式子想出现期望,是不是需要在 P(X=i) 上乘一个 i 呀?如何让这个 i 出现呢?求导啊!

f(x)=i=0+iP(X=i)xi1      f(1)=i=0+iP(X=i)

综上所述

f(1)=1    f(1)=E(X)

先设一个变量 Y 表示(任意一次随机的过程中)停止的时候 T 的长度,也就是随机了 Y 个字符的时候恰好随机出 S

引入两个概率生成函数 f(x) 和 g(x) ,分别表示 Y=i 的概率和 Y>i 的概率。也就是

f(x)=i=0+P(Y=i)     g(x)=i=0+P(Y>i)

fi 表示 f(x)xi 次方系数,也就是 Y=i 的概率, gi 同理。

接下来就可以建立一些递推式子:

gi=fi+1+gi+1(i1)

生成函数中则为( +1 是因为处理边界情况):

xg(x)+1=f(x)+g(x)      f(x)=(x1)g(x)+1

再求导(函数乘积求导公式[g(x)f(x)]=g(x)f(x)+f(x)g(x)):

f(x)=(x1)g(x)+g(x)

过程2

我们设一个新的数列 hi(i0) 表示同时满足下列两个条件 (记为事件A) 的概率:

1.随机了 i 个字符但没出现 S

2.接着无条件随机 m 个字符( mS 长度) ,且 m 个字符刚好为 S

什么叫“无条件”呢?就是随机这 m 个字符的过程中,有可能还没随机够 m 个,就已经出现 S 了。这种情况下我们强迫它一定要随机够 m 个。

相当于,hi​ 表示的是这一个事件 A 的发生概率:

如何计算 hi

第一种方法

两事件相互独立,概率乘起来,即有:

hi=ginm

第二种方法

如果事件 A 发生,则一定满足 i<Yi+m ,我们讨论 Y 每一个取值

假设Y=y ,这个前提的概率是 fi ,我们求出在这个前提下事件 A 发生的概率乘起来并且将Y=y      y(i,i+m] 的所有概率加起来就是事件 A 发生的概率 hi

t=yi 也就是代表无条件随机 t 个字符就出现 S

重点

那么字符串 S0St 一定为一个前缀(因为从 0t )

那么字符串 S0St 一定为一个后缀(因为我们从 t 结束的 )

也就是 Sborder

概率也就好求了

条件 b 是概率性的,剩下来的字符和前面的是独立的,因此这 mt 个字符满足要求的概率就是 n(mt)=ntm

因此在 Y=y,t=yi 条件下,事件 A 的概率是 [S0Stborder]ntm

根据全概率公式,把所有可能情况的概率加起来,事件 A 发生的概率 hi 就是

t=1mfyntm[S0Stborder],t=yi    hi=t=Sborderfi+tntm

综上,根据两种方法求出的 hi 联立

ginm=t=Sborderfi+tntmgi=t=Sborderfi+tnt

把 g(x) 乘以 xm,第 i+m 项的系数变成了 gi​。

把 f(x) 乘以 xmt,第 i+m 项的系数变成了 f(i+m)(mt)=fi+t

所以

xmg(x)=t=Sborderxmtf(x)nt

我们要求期望,也就是 g(1)

g(1)=t=Sborderf(1)nt

翻到前面可以看到 f(1) 是总概率是 1

得到:

g(1)=t=Sbordernt

border 用 kmp 求一下就可以啦(本题 S 本身也是 S 的border)

posted @   He_Zi  阅读(77)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示