形式幂级数实用方法

既然是实用,本篇文章不包含以 FFT 为核心的多项式技术。

要使用形式幂级数解决问题,我们最关心的无非三点:

  1. 怎么用形式幂级数描述问题。
  2. 怎么用形式幂级数推导。
  3. 怎么从形式幂级数中得到答案。

其中第一点,有组合问题符号化方法来帮助我们,所以暂时不讨论(其实是我还没学会)。

第二点,主要利用的是卷积的性质列出方程,然后解方程,这里大多可以手算,手算不行的还是考虑 FFT 吧。

第三点。所谓从形式幂级数中得到答案,就是算出其系数,而这又分两种情况:

  1. 算出前 \(n\) 项系数。
  2. 算出远处 \(1\) 项系数。

我们有不用 FFT 的方法来做这两类问题,遗憾的是这两类问题大多都可以使用 FFT 做到更优。

对于第一类问题,我们有 \(O(n^2)\) 递推的多项式卷积、求逆、\(\exp\)\(\ln\)

对于第二类问题,又分几类问题:

  1. 可以直接展开的情况。
  2. 有理分式的情况。
  3. 其他情况。

第零类问题,直接展开就好了。

第一类问题,可以使用部分分式法直接求出通项,然后使用快速幂。如果不想这么搞可以写一个矩阵快速幂,因为有理分式的系数是一个线性递推数列,阶数为分母多项式的阶。

第二类问题,可以尝试使用拉格朗日反演来解决,看看能不能变成第一类问题。

好吧上面说的那些东西都是泛泛而谈,下面详细来讲解一下。

首先需要介绍一些经常用到的记号数学工具。

常用记号

  • \([z^n]F(z)\):提取 \(F(z)\)\(z^n\) 项系数。
  • \(\binom{n}{m}\):二项式系数。
  • \(n^{\underline{m}}\):下降幂。
  • \(\frac{\mathrm{d}}{\mathrm{d}x}F(x)\):对 \(F(x)\) 关于 \(x\) 求导。又写作 \(F^{'}(x)\)
  • \(\int F(x)\mathrm{d}x\):对 \(F(x)\) 关于 \(x\) 不定积分。

部分分式法

给定一个有理分式 \(\displaystyle\frac{P(x)}{Q(x)}\),将其分解为一些较简分式的和。

方法自己上网搜。

二项式系数

\(n\) 个物品里选 \(m\) 个的方案数:

\[\binom{n}{m}=[z^m](1+z)^n=n^{\underline{m}} \]

为什么是这个呢,考虑乘法原理,相当于每一项可以选 \(1\) 或者 \(z\),提取 \(z^m\) 系数就相当于算有多少种方法选了 \(m\)\(z\)

这里就懒得讲那些公式了。

广义二项式系数

\[\binom{\alpha}{m}=[z^m](1+z)^{\alpha}=\alpha^{\underline{m}} \]

其中 \(\alpha\in\mathbb{R}\)

证明用数学分析相关知识搞一下,我也没学过我就不误人子弟了。

超几何级数

还没搞。

形式幂级数初步

一个形式幂级数有两种形态,封闭形式和展开形式。

从封闭形式变成展开形式就是在 \(0\) 处的泰勒展开。

从展开形式变成封闭形式需要动点脑子。其实你背背这个表就行:

封闭形式 展开形式
有限项的多项式 有限项的多项式
\(\frac{1}{1-cz}\) \(\sum_{i=0}^{\infin}z^ic^i\)
\((1+z)^m\) \(\sum_{i=0}^{\infin}z^i\binom{m}{i}\)
\(\frac{1}{(1-z)^{m}}\) \(\sum_{i=0}^{\infin}z^i\binom{m+i-1}{m}\)
\(\ln\frac{1}{1-z}\) \(\sum_{i=0}^{\infin}z^i\frac{1}{i}\)
\(e^z\) \(\sum_{i=0}^{\infin}z^i\frac{1}{i!}\)

现在我们来定义形式幂级数的各种运算。

加减乘,求导积分,复合,直接把形式幂级数当做多项式做就行,两个形式幂级数做这些运算之后还是形式幂级数。容易验证求导积分的那些方法在形式幂级数中仍然生效。

除法呢?这相当于我们在探讨一个形式幂级数有乘法逆的充要条件。

如果说 \(F\) 存在乘法逆 \(G\),那么就是说:

\[FG=1 \]

两边提取 \(z^n\) 系数:

\[\begin{aligned} [z^n]FG&=[n=0]\\ \sum_{i=0}^n[z^{n-i}]F\times [z^i]G&=[n=0] \end{aligned} \]

考察我们该怎么算出来 \(G\)\(n\) 次系数。根据上面的式子,如果我们知道了 \(G\) 的前 \(n-1\) 次系数,配合 \(F\) 的系数就能递推出 \([z^n]G\)。唯一的坑点在于求 \([z^0]G\) 时,如果 \([z^0]F=0\),那么不存在一个数 \(x\) 使得 \(0\times x=1\),所以也就不存在这样的 \(G\)

综上所述,如果 \([z^0]F\neq 0\),那么 \(F\) 存在乘法逆,否则不存在。

然而我们还可以对形式幂级数求 \(\exp\)\(\ln\),不过这都是后话了。

有理分式与线性递推

现在我们来探讨一类重要的形式幂级数:有理分式。

所谓有理分式就是 \(\frac{P(z)}{Q(z)}\),其中 \(P,Q\) 为多项式。

我们可以将其看做 \(P(z)\)\(Q(z)\) 的乘法逆的卷积,于是使用朴素多项式求逆和卷积可以做到 \(O(n^2)\) 求出前 \(n\) 项系数。

现在我们要快速求出远处一项系数 \([z^n]\frac{P(z)}{Q(z)}\) 呢?不妨还是先求出 \(\frac{1}{Q(z)}\) 的后 \(n-\deg P\sim n\) 项系数,再与 \(P(z)\) 进行卷积求出 \([z^n]\) 系数。

考察上面我们刚推的多项式求逆递推式,发现其递推阶数是 \(\deg Q\) 量级。于是可以矩阵乘法加速递推做到 \(O(\max\{\deg P,\deg Q\}^3\log n)\) 求远处一项系数。

更进一步地,使用部分分式法分解 \(\frac{1}{Q(z)}\),然后给每一项提取系数可以直接求出通项。

拓展学习:BM 递推,可以在 \(O(\deg \log\deg\log n)\) 的时间内求出一项系数。

posted @ 2025-08-14 09:39  Linge_Zzzz  阅读(10)  评论(0)    收藏  举报