2023.9.30 闲话
推歌:Sleep Talk Metropolis - Mili .
记几个 PGF 问题 .
原论文:《浅谈生成函数在掷骰子问题上的应用》杨懋龙 .
概率生成函数(PGF):
根据定义可以得到 \(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)\),则:
对上式求导并代入 \(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\) 可得:
综合,即得:
于是得到一个线性递推,可以通过各式方法求解 .
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)\),则:
对上式求导并代入 \(z=1\) 可得 \(\displaystyle\sum_{i=1}^nF'_i(1)=G(1)\) .
对下式代入 \(z=1\) 可得:
和 \(\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)\),则:
后面的过程和前几题类似,最终可以得到 \(F'(1)=\dfrac{m^n-1}{m-1}\) .
第二问
令 \(f_i\) 为结束时长为 \(i\) 的概率,\(g_i\) 为长为 \(i\) 没结束的概率,其 PGF 分别为 \(F(z),G(z)\),则:
最终 \(\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)\),则:
将后式代入前式可得:
最终解出来可以得到 \(F'(1)=\dfrac{2n}{n+2}\) .
以下是博客签名,正文无关
本文来自博客园,作者:Jijidawang,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/17720079.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ