【笔记】生成函数 · 进阶(EGF)

写在前面

本文除了例题 @.1 P4389 付公主的背包 使用 OGF 其她的均为 EGF

0 约定

0.1 一些形象的表达

  1. 收缩: 指一个式子由比较复杂的形式变简单。本文中大概率就是指一个生成函数用封闭形式来表达;
  2. 多项式的平移: 对于任意一个多项式 \(A(x)\),向左平移 \(m\) 位指 \(\left(A(x)-\sum\limits_{i=0}^{m-1}a_ix^i\right)/x^m\);向右平移 \(m\) 位指 \(A(x)\times x^m\)​;

0.2 记号

  1. 如果没有特别说明,大写字母一般表示其小写字母的生成函数的封闭形式。

1 封闭形式的生成

  1. 由递推式生成: 将等式两边同时乘上形式元 \(z^n\) 并对 \(n\ge 0\) 求和。然后分开收缩之后再求和;
  2. 由数列生成: 将原数列的生成函数 \(F(x)\) 向右平移 \(1\) 位,然后求 \(xF(x)-F(x)\),从而列出方程求解;
  3. 由多个生成函数运算生成:
    1. 复合: 直接带入就行;
    2. 两个生成函数以卷积形式相乘,就等价于她们的封闭形式相乘。
    3. 其她的,按运算法则算就好;

由一个封闭形式推另一个封闭形式的时候,系数中的 \(n\) 一定要转移到 \(z\) 的指数上去(大概率是求导。


2 指数生成函数 EGF

我们称满足如下形式的形式幂级数为 指数生成函数 (Exponential Generating Function, EGF)

\[\hat A(z)=\sum_{n\ge0}a_n\dfrac {z^n}{n!} \]

特别地,我们会用 \(\left[\frac {z^n}{n!}\right]\) 来直接提取 \(a_n\),而若用 \([z^n]\) 的话提取到的是 \(\frac {a_n}{n!}\)

也就是说 \(\left[\frac {z^n}{n!}\right]\)\(n![z^n]\)​ 是等价的。

值得注意的是,EGF 的原生数列(系数数列),指的是用 \([z^n]\) 提取的值,是包含 \(n!\) 的。


2.1 运算法则

  1. \(z^m\hat A(z)\) 在 OGF 的语境下为平移;而在 EGF 下,由于 \(n!\) 并不会改变,所以并不是直接平移,最终的数列应该是 \(\{a_{n-m}\cdot \frac {n!}{(n-m)!} \}\)

  2. \(\hat A^\prime(z)\) 在 OGF 的语境下为带系数的移位,生成 \(\{(n+1)a_{n+1} \}\);而在 EGF 中,就是真正的向左平移(一位)了,而 \(\int_{0}^{z} \hat{A}(t) \mathrm{d} t\) 也就是向右平移了。

  3. $\hat{C}(z)=\hat{A}(z) \hat{B}(z) $$ 在 OGF 语境下为普通卷积,在 EGF 语境下为二项卷积,也即:

    \[c_{n}=\sum_{k}\binom{n}{k} a_{k} b_{n-k} \]


@ 例题

@.1 P4389 付公主的背包

用 dp 递推式生成封闭形式,再快速求解

定义 \(f_{i,j}\)\(i\) 个物品,凑出容量为 \(j\) 的方案数。

有递推式:

\[f_{i,j}=\sum_{t\in\mathbb N}f_{i-1,j-v_it} \]

然后用 1.1 的手法,配一个形式元上去:

\[f_{i,j}z_j=\sum_{t\in\mathbb N}f_{i-1,j-v_it}z^{j-v_it}\cdot\sum_{t\in\mathbb N}z^{v_it} \]

进而:

\[F_i(z)=F_{i-1}(z)\cdot \dfrac 1 {1-z^{v_i}};F_0=1 \]

后续的“计算”和生成函数本身无关。


@.2 贝尔数

\(\{1,2,3,\dots,n\}\) 划分为若干个非空子集的方案数 \(\omega_n\) 称为 贝尔数

考虑 \(1\) 所在的子集,写出如下转移式:

\[\omega_n=\sum_{i=0}^{n-1}{n-1\choose i}\omega_{n-i-1} \]

这实际上是划分集合的惯用 trick,即考虑一个特定元素最终所在集合。

继续用 1.1 的手法尝试:

\[\sum_{n\ge0}\omega_nz^{n-1}=\sum_{n\ge0}\omega_{n-i-1}z^{n-i-1}\cdot \sum_{i=0}^{n-1}{n-1\choose i}z^i \]

发现 \({n-1\choose i}z^i\) 不能直接收拢欸。

注意到我们现在能继续的变形,只能把组合数拆成阶乘:

\[\sum_{n\ge0}\omega_n\dfrac {z^{n-1}}{(n-1)!}=\sum_{n\ge0}\omega_{n-i-1}\dfrac{z^{n-i-1}}{(n-i-1)!}\cdot \sum_{i=0}^{n-1}i!\dfrac{z^i}{i!} \]

然后我们惊奇的发现,这三坨求和其实就是 EGF。

……


@.3 「CF908G」New Year and Original Order

posted @ 2024-07-22 22:22  CloudWings  阅读(0)  评论(0编辑  收藏  举报