多项式与生成函数重谈

梦到什么写什么,这一块东西太多了,所以持续更新。

毕竟是重谈所以就只是记录一些重要的和新的内容,基础性的内容就略过了。

封闭形式的展开

麦克劳林展开

简单来说,\(f(x)=\sum\limits_{i=0} \dfrac{f^{(i)}(0)x^i}{i!}\)。这可以解决大部分常见函数了。

简单分式的展开

以下的分式展开形式从左往右和从右往左都比较常用。

  • \(\dfrac{1}{1-x}=\sum\limits_{i=0}^{\infty}x^i\)

  • \(\dfrac{1}{1-x^k}=\sum\limits_{i=0}^{\infty}x^{ik}\)

  • \(\dfrac{1}{1-ax}=\sum\limits_{i=0}^{\infty}a^ix^i\)

  • \(\dfrac{1}{1-ax^k}=\sum\limits_{i=0}^{\infty}a^ix^{ik}\)

本质上对第一个换元就可以了。这里也可以看出 \(\dfrac{1}{1-x}\) 可以作为前缀和算子。

高次分式的展开

以二次式为例,展开 \(\dfrac{1}{(p-x)(q-x)}\)

待定系数,设 \(\dfrac{1}{(p-x)(q-x)}=\dfrac{A}{p-x}+\dfrac{B}{q-x}\),通分解出来即可。

而对于分母里有 \((p-x)^k\) 之类的东西,在设系数的时候可以设 \(\dfrac{A_1}{p-x}+\dfrac{A_2}{(p-x)^2}+\cdots+\dfrac{A_k}{(p-x)^k}\),看起来更舒服。

递推式展开

有的时候并不好写通项,但是如果能写出递推式也能高效解决问题。

一种方法是列出 ODE 对比系数(事实上有的时候 ODE 不好解出封闭形式,但是容易得到递推式)。对于一些形式上特殊或者简单的封闭形式,可能通过一些变换很快就能得到递推式。例如形如 \(\dfrac{1}{C+Bx+Ax^2}=\sum\limits_{i=0}^{\infty}a_ix^i\),移项卷积可以得到 \(a_0=\frac{1}{C},a_1=-\frac{B}{C^2},a_n=-\frac{B}{C}a_{n-1}-\frac{A}{C}a_{n-2}\)

[CERC2015] Frightful Formula

边界上的贡献是简单的。主要是对 \(\sum\limits_{i=0}^{n-2}\sum\limits_{j=0}^{n-2}\dbinom{i+j}{i}a^ib^j\) 的处理。当然可以卷积做。

考虑 GF 写递推或通项,\(F(x)=\sum\limits_{i=0}^{n-2} \dfrac{a^ix^i}{i!},G(x)=\sum\limits_{i=0}^{n-2} \dfrac{b^ix^i}{i!}\),令 \(H(x)=F(x)G(x)\),所求即为 \(\sum\limits_{i=0}^{2n-4} i![x^i]H(x)\)

两边同时求导得:

\[\begin{aligned} H'(x)&=F(x)G'(x)+F'(x)G(x) \\ &=F(x)\left(bG(x)-\dfrac{b^{n-1}x^{n-2}}{(n-2)!}\right)+G(x)\left(aF(x)-\dfrac{a^{n-1}x^{n-2}}{(n-2)!}\right) \\ &=(a+b)H(x)-F(x)\dfrac{b^{n-1}x^{n-2}}{(n-2)!}-G(x)\dfrac{a^{n-1}x^{n-2}}{(n-2)!} \\ &=(a+b)H(x)-\dfrac{x^{n-2}}{(n-2)!}(F(x)b^{n-1}+G(x)a^{n-1}) \end{aligned} \]

代入 \(f_i=i![x^i]H(x)\) 化为递推式:

\[\begin{aligned} f_{i+1}&=(a+b)f_i-i![x^i]\dfrac{x^{n-2}}{(n-2)!}(F(x)b^{n-1}+G(x)a^{n-1}) \\ &=(a+b)f_i-\dfrac{i!}{(n-2)!}\left(\dfrac{a^{i-n+2}b^{n-1}}{(i-n+2)!}+\dfrac{b^{i-n+2}a^{n-1}}{(i-n+2)!}\right) \\ &=(a+b)f_i-\dbinom{i}{n-2}(a^{i-n+2}b^{n-1}+b^{i-n+2}a^{n-1}) \end{aligned} \]

于是做完了。

其它方法

包括但不限于二项式定理展开高次二项式等。

组合意义

对于 OGF \(\dfrac{1}{1-F(x)}\),与 EGF \(\exp F(x)\) 的组合意义。

OGF 组合意义

\(G(x)=\sum\limits_{i=0}^{\infty}F^i(x)=\dfrac{1}{1-F(x)}\)\(F(x)=1-\dfrac{1}{G(x)}\)

放两道比较经典的题,可以直观感受上面两个式子的组合意义。

QOJ7766 栞

这里谈特殊性质 \(q=(1,2,\cdots,n)\)

先考虑判定,此时对于一个 \(p\) 的划分可以贪心:假设前面分好了 \(1\sim i\),当前段必须是从 \(i+1\) 开始的值域连续的一段。所以每次贪心找到最小的满足条件的段,看最后分出来的段是否 \(\geq k\) 个,因为相邻两个段显然是可以合并的。

于是问题转变为如何求一个极小段的方案数。注意到方案数与最小值无关,只与段的长度有关,不妨设最小值为 \(1\),长度为 \(n\) 的方案数为 \(f_n\)。此时对于一个排列 \(a\),即要求不存在一个前缀 \(a_1\sim a_i\),使得这个前缀的值域为 \(1\sim i\)

到这里可以直接枚举最小的 \(i\) 进行容斥:\(f_n=n!-\sum\limits_{i=1}^{n-1}f_i(n-i)!\)。但是这里可以利用 OGF 的组合意义:对于一个排列 \(p\),一定是分成了若干极小段 \(p_1,p_2,\cdots,p_k\)。令 \(F(x)=\sum f_ix^i\),有等式 \(n!=[x^n]\sum\limits_{i=0}^{\infty}F^i(x)\)。若令 \(G(x)=\sum i!x^i\),有 \(G(x)=\dfrac{1}{1-F(x)}\)。可以解出 \(F(x)=1-\dfrac{1}{G(x)}\),和上面容斥的式子是一样的。顺带一提上面那个式子稍微变一下就是暴力求逆的式子,需要关注常数项。

CF1093F 加强版

考虑容斥,钦定若干连续段,连续段的容斥系数和其长度相关,设容斥系数的生成函数 \(F(x)\)。目标是 \(1\sim \text{len}-1\) 能够被算 \(1\) 次,其它算 \(0\) 次,考虑连续段拼接的组合意义,要求容斥系数之积的和,则有 \(\sum\limits_{i=0}^{\infty}F^i(x)=\sum\limits_{i=1}^{\text{len}-1}x^i\)。写成封闭形式:\(\dfrac{1}{1-F(x)}=\dfrac{1-x^{\text{len}}}{1-x}\),解得 \(F(x)=\dfrac{x-x^{\text{len}}}{1-x^{\text{len}}}\)。考虑展开这个简单分式,\(\dfrac{x}{1-x^{\text{len}}}\) 表示 \(n\bmod \text{len}=1\) 时系数为 \(1\)\(\dfrac{-x^{\text{len}}}{1-x^{\text{len}}}\) 表示 \(n\bmod\text{len}=0\land n>0\) 时系数为 \(-1\),其它系数为 \(0\)。后面的 dp 部分是平凡的。

EGF \(\exp\) 组合意义

相对来说更为常见,用得太多比较熟悉就不写了。\(\ln\)\(\exp\) 的逆运算(如说)。

大概就是 \(\exp F(x)=\sum\limits_{i=0}^N \dfrac{F^i(x)}{i!}\),和 OGF 相比带标号,所以有个 \(\frac{1}{i!}\) 来除序。

顺带说一下暴力求 \(\exp\)\(\ln\)

\(G(x)=\exp F(x)\),两边同时求导得:\(G'(x)=F'(x)\exp F(x)\),即 \(G'(x)=F'(x)G(x)\)。比对 \(n\) 次项系数:\(ng_n=\sum\limits_{i=1}^n if_ig_{n-i}\)

于是得到 \(g_n=\frac{1}{n}\sum\limits_{i=1}^n if_ig_{n-i}\)\(f_n=g_n-\frac{1}{n}\sum\limits_{i=1}^{n-1}ig_if_{n-i}\)

二维 FFT

二元多项式卷积。

一个很直观的想法是对一维做先做 DFT,然后在这一维做点乘的时候第二位套用多项式乘法。这是对的,但是在两维大小相差较大时常数很大,效率堪忧。

另一个做法是先对每一行做 DFT,再对每一列做 DFT,点乘之后对每一列做 IDFT,最后对每一行做 IDFT。这样需要 \(6\) 次 FFT。

更优秀的做法是考虑占位变为一元多项式卷积。具体来说,令 \(p\)\(y\) 在卷积后可能的最大次数,将 \([x^iy^j]\) 视作 \([z^{i(p+1)+j}]\) 的一元多项式进行卷积然后还原就可以了。这样只需要 \(3\) 次 FFT,非常优秀。

Bostan-Mori 算法

从一个问题引入:求 \([x^m]\dfrac{P(x)}{Q(x)}\)\(m\) 很大,\(P,Q\) 是不超过 \(n\) 次的多项式。

Hint:上下同乘 \(Q(-x)\),后面的过程就很自然了。

此时分母只剩偶次项,不妨设分母 \(Q(x)Q(-x)=G(x^2)\),分子 \(P(x)Q(-x)=F_0(x^2)+xF_1(x^2)\)。分讨 \(m\) 的奇偶性,若 \(m\) 为偶数,只有 \(F_0(x^2)\) 的部分有用;否则只有 \(xF_1(x^2)\) 的部分有用。这样把问题归约到了一个 \([x^{\lfloor\frac{m}{2}\rfloor}]\dfrac{F(x)}{G(x)}\),继续递归直到 \(m=0\) 可以直接得到结果。计算 \(F,G\) 需要卷积,每次 \(m\) 减半,时间复杂度 \(O(\mathsf{M}(n)\log m)\)

于是可以解决求解分式远处系数的问题,其广泛的应用在下面会看到,先放例题。

ABC436G Linear Inequation

这很像付公主的背包:\(\prod\limits_{i=1}^N \dfrac{1}{1-x^{A_i}}\)。由于是 \(\leq M\) 需要再做前缀和,所求即为 \([x^M]\dfrac{1}{(1-x)\prod\limits_{i=1}^N (1-x^{A_i})}\)\(M\) 太大了没有办法直接求逆,把分母先分治卷出来,然后套用 Bostan-Mori 即可。

【模板】常系数齐次线性递推

\(Q(x)=1-f_1x-f_2x^2-\cdots-f_kx^k\)\(P(x)=A\times Q\bmod x^k\)。用 Bostan-Mori 求 \([x^n]\dfrac{P(x)}{Q(x)}\) 即可。

Power Projection

问题引入:对 \(0\leq i\leq n\)\([x^n]F^i(x)\)\(F\)\(n\) 次多项式。

引入 \(y\) 来占位,等价于对于 \(0\leq i\leq n\)\([x^ny^i]\sum\limits_{i=0}^ny^iF^i(x)\)。这么做的好处是可以缩到一起:\([x^ny^i]\frac{1}{1-yF(x)}\),然后可以仿照 Bostan-Mori 进行递归求解,只不过求的东西从数变成了关于 \(y\) 的多项式(所以需要二维 FFT)。

在递归的第 \(i\) 层,由于 \(x\) 次数大于 \(n\) 时不再有意义(所求只需要 \([x^n]\),这也是与分式远处系数不一样的地方),\(x\) 的次数不超过 \(\frac{n}{2^i}\)\(y\) 的次数不超过 \(2^i\),时间复杂度 \(O(M(n)\log n)\)

ABC439G Sugoroku 6

整体思路比较简单,关键在于科技是否点够了。

\(f_i\) 为前 \(i\) 轮还没有赢的概率。对一轮骰子摇出来点数的概率,有生成函数 \(F(x)=\dfrac{1}{M}\sum\limits_{i=1}^M x^{A_i}\)\(F^i(x)\) 即表示 \(i\) 轮后走到某个位置的概率。于是 \(f_i=\sum\limits_{k=0}^{N-1}[x^k]F^i(x)\),乘上前缀和算子 \(\dfrac{1}{1-x}\) 变为 \([x^{N-1}]\dfrac{F^i(x)}{1-x}\)。这是 Power Projection 的形式,只不过多乘了一个 \(\dfrac{1}{1-x}\),将其展开为 \(\sum\limits_{i=0}^{N-1}x^i\) 放到分子上照常做 Bostan-Mori 即可求出 \(f\)

后半部分比较简单,是对每个 \(i\) 计算 \(\sum\limits_{k=1}^N (f_{k-1}-f_k)f_k^{i-1}f_{k-1}^{L-i}\)。考虑到对 \(1\leq i\leq L\) 都要求答案,又有个求和的 \(k\),所以大致的思路是写出这东西的 GF \(G_k(x)\)\([x^i]G_k(x)\) 表示 \(k\)\(i\) 的贡献,这样所求即为 \([x^i]\sum\limits_{k=1}^N G_k(x)\)。将关于 \(i\) 的式子处理成一项:\(\sum\limits_{k=1}^N (f_{k-1}-f_k)f_{k-1}^{L-1}\left(\dfrac{f_k}{f_{k-1}}\right)^{i-1}\),答案可以表示成:\([x^{i-1}]\sum\limits_{k=1}^N \dfrac{(f_{k-1}-f_k)f_{k-1}^{L-1}}{1-\frac{f_k}{f_{k-1}}x}\),分治卷一起(维护分式可以保证项数与区间长度同阶)就完了。

时间复杂度 Power Projection 与分治卷积均为 \(O(\mathsf{M}(N)\log N)\)

形式幂级数/多项式复合

先记一个从 Power Projection 转置的做法,再学多项式省选真的要无了。

\(f(g(x))\bmod x^n\),其中 \(f,g\) 次数小于 \(n\)

显然对 \(f\) 来说这是线性变换,假设输出为 \(Ab\),有矩阵 \(A_{i,j}=[x^j]g^i(x)\)\(b\)\(f\) 形成的列向量。

转置原理考虑 \(A^Tb\) 的计算,\(A^T=[x^i]g^j(x)\)。需要对 \(0\leq j<n\) 求出 \(\sum\limits_{i=0}^{n-1}b_i[x^i]g^j(x)\)。这是 Power Projection 的形式,构造分子 \(h(x)=\sum\limits_{i=0}^{n-1}b_ix^{n-i}\),化成标准形式 \([x^ny^j]\dfrac{h(x)}{1-yg(x)}\),套 Bostan-Mori 即可。

posted @ 2026-01-04 19:51  _Communist  阅读(6)  评论(0)    收藏  举报