概率生成函数

发布时间 2023-05-31 16:30:59作者: He_Zi

概率生成函数

认识概率生成函数,形如

\[f(x) = \sum_{i = 0}^{+\infty}P(X = i)x^i \]

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

这个东西有两个用处:

1 关于概率

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

2 关于期望

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

\[f'(x) = \sum_{i = 0}^{+\infty}iP(X = i)x^{i - 1} ~~~\Rightarrow~~~f'(1) = \sum_{i = 0}^{+\infty}iP(X = i) \]

综上所述

\[f(1) = 1~~~~f'(1)=E(X) \]

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

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

\[f(x) = \sum_{i = 0}^{+\infty}P(Y = i)~~~~~g(x) = \sum_{i = 0}^{+\infty}P(Y > i) \]

\(f_i\) 表示 \(f(x)\)\(x^i\) 次方系数,也就是 \(Y = i\) 的概率, \(g_i\) 同理。

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

\[g_i = f_{i + 1}+g_{i + 1} (i \geq 1) \]

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

\[xg(x) + 1 = f(x) + g(x) ~~~\Rightarrow~~~f(x) = (x-1)g(x) + 1 \]

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

\[f'(x) = (x - 1)g'(x) + g(x) \]

过程2

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

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

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

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

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

如何计算 \(h_i\)

第一种方法

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

\(h_i = g_in^{-m}\)

第二种方法

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

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

\(t = y - i\) 也就是代表无条件随机 \(t\) 个字符就出现 \(S\)

重点

那么字符串 \(S_0 - S_t\) 一定为一个前缀(因为从 \(0-t\) )

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

也就是 \(S\)\(border\)

概率也就好求了

条件 \(b\) 是概率性的,剩下来的字符和前面的是独立的,因此这 \(m−t\) 个字符满足要求的概率就是 \(n^{−(m−t)}=n^{t−m}\)

因此在 \(Y = y,t=y-i\) 条件下,事件 \(A\) 的概率是 \([S_0 - S_t是一个border]n^{t-m}\)

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

\[\sum_{t=1} ^ {m}f_yn^{t - m}[S_0 - S_t是一个border] , t = y - i~~\Rightarrow~~ h_i = \sum_{t=S的border长} f_{i+t}n^{t - m} \]

综上,根据两种方法求出的 \(h_i\) 联立

\[g_in^{-m} = \sum_{t=S的border长} f_{i+t}n^{t - m}\\ \Rightarrow g_i = \sum_{t=S的border长} f_{i+t}n^{t} \]

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

把 \(f(x)\) 乘以 \(x^{m−t}\),第 \(i+m\) 项的系数变成了 \(f_{(i+m)−(m−t)}​=f_{i+t}\)

所以

\[x^{m} * g(x) = \sum_{t=S的border长} x^{m - t}f(x)n^{t} \]

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

\[g(1) = \sum_{t=S的border长} f(1)n^{t} \]

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

得到:

\[g(1) = \sum_{t=S的border长} n^{t} \]

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