2023.9.30 闲话

推歌:Sleep Talk Metropolis - Mili .

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


记几个 PGF 问题 .

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

概率生成函数(PGF):

\[F(z)=\mathbb E(z^X)=\prod_{i\ge0}\mathbb P(X=i)z^i \]

根据定义可以得到 \(k\) 阶阶乘矩 \(\mathbb E(X^{\underline k})=F^{(k)}(1)\) .

进而可以推得方差:\(\operatorname{Var}(X)=F''(1)+F'(1)-F'(1)^2\) .

Problem 1

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

\(n\le10^5\) .

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

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

\[\begin{aligned}&F(z)+G(z)=1+z\cdot G(z)\\& G(z)\cdot\left(\dfrac zm\right)^n=\sum_{i=1}^np_i\cdot F(z)\cdot\left(\dfrac zm\right)^{n-i}\end{aligned} \]

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

对下式代入 \(z=1\) 可得 \(\displaystyle G(1)=\sum_{i=1}^np_i\cdot m^i\) .

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

Problem 1.5

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

\(n,k\le10^3\) .

从推出两个表达式开始做,对上式求 \(k\) 阶导并代入 \(z=1\) 可得 \(F^{(k)}(1)=k\cdot G^{(k-1)}(1)\) .

对下式求 \(k-1\) 阶导并代入 \(z=1\) 可得:

\[G^{(k-1)}(1)=\sum_{i=1}^np_i\cdot m^i\sum_{j=0}^{k-1}(-1)^j\dbinom{k-1}j(i+j-1)^{\underline{j+1}}F^{(k-j-1)}(1) \]

综合,即得:

\[F^{(k-1)}(1)=k\sum_{i=1}^np_i\cdot m^i\sum_{j=0}^{k-1}(-1)^j\dbinom{k-1}j(i+j-1)^{\underline j}F^{(k-j-1)}(1) \]

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

Problem 2

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

\(n\le15\)\(l_i\le 2\times10^4\)\(m\le 10^5\) .

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

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

为了方便,令 \(\displaystyle p(S)=\prod_{i\in S}p(i)\)\(t_{i,j,k}=[a_i[i:k]=a_j[l_j-k+1;l_j]]\) .

\(f_{i,j}\) 为结束时出现 \(a_i\) 长度为 \(j\) 的概率,\(g_i\) 为到长度为 \(i\) 还未结束的概率,其 PGF 分别为 \(F_i(z),G(z)\),则:

\[\begin{aligned}&\sum_{i=1}^nF_i(z)+G(z)=1+z\cdot G(z)\\&G(z)p(a_i)\cdot z^{l_i}=\sum_{j=1}^n\sum_{k=1}^{l_i}t_{i,j,k}\cdot F_j(z)\cdot p(a_i[k+1,l_i])\cdot z^{l_i-k}\end{aligned} \]

对上式求导并代入 \(z=1\) 可得 \(\displaystyle\sum_{i=1}^nF'_i(1)=G(1)\) .

对下式代入 \(z=1\) 可得:

\[G(1)=\sum_{j=1}^nF_j(1)\sum_{k=1}^{l_i}\dfrac{t_{i,j,k}}{p(A_i[1:k])} \]

\(\displaystyle\sum_{i=1}^nF_i(1)=1\) 联立,Gauss 消元即可求出每个 \(F_i(1)\) .

所以本问题可以基于 Hash 做到 \(\Theta(n\sum l_i+2^nn^3)\) 的时间复杂度 .

Problem 3

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

\(n,m\le 10^6\) . 保证过程能够期望在有限步内结束 .

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

第一问

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

\[\begin{aligned}&F(z)+G(z)=1+z\cdot G(z)\\&G(z)\left(\dfrac zm\right)^{n-1}=\sum_{i=1}^nF(z)\left(\dfrac zm\right)^{n-i}\end{aligned} \]

后面的过程和前几题类似,最终可以得到 \(F'(1)=\dfrac{m^n-1}{m-1}\) .

第二问

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

\[\begin{aligned}&F(z)+G(z)=1+z\cdot G(z)\\&G(z)\left(\dfrac zm\right)^n m^{\underline n}=\sum_{i=1}^nF(z)\left(\dfrac zm\right)^{n-i}(m-i)^{\underline{n-i}}\end{aligned} \]

最终 \(\displaystyle F'(1)=\sum_{i=1}^nm^i\cdot m^{\underline i}\) .

Problem 4

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

\(n\le 10^9\) . 保证 \(n\) 是偶数 .

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

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

\[\begin{aligned}&F(z)+G(z)=G(z)\cdot\frac z2+\frac{G(1)}2+1\\&F(z)=G(z)\cdot\dfrac zn\end{aligned} \]

将后式代入前式可得:

\[G(z)\left(1+\dfrac zn-\dfrac z2\right)=\dfrac n2+1 \]

最终解出来可以得到 \(F'(1)=\dfrac{2n}{n+2}\) .

posted @ 2023-09-30 16:24  Jijidawang  阅读(56)  评论(0编辑  收藏  举报
😅​