[学习笔记] 多项式拉格朗日反演与复合逆

不会多项式。

多项式复合函数

讲复合逆之前,先讲讲复合函数。这个问题是说,给定一个 \(n\) 次多项式 \(F(x)\),和一个 \(m\) 次多项式 \(G(x)\),你需要求一个 \(n\) 次多项式 \(H(x)\) ,满足条件:

\[H(x) \equiv F(G(x))\space (\text{mod }x^{n+1}) \]

换种说法,你要求的多项式应满足:

\[H(x) \equiv \sum\limits_{i=0}^n [x^i]F(x)\times G(x)^i \space (\text{mod }x^{n+1}) \]

做法

\(B = \sqrt{n}\)。类似 BSGS:

\[\begin{aligned} \sum_{i=0}^n [x^i] F(x)G(x)^i &= \sum_{i=0}^{B-1} \sum_{j=0}^{B-1} [x^{iB+j}] F(x)G(x)^{iB+j} \\ &= \sum_{i=0}^{B-1} G(x)^{iB} \sum_{j=0}^{B-1} [x^{iB+j}] F(x)G(x)^j \end{aligned} \]

预处理出所有 \(G(x)^j\)\(G(x)^{iB}\),这部分用 NTT 计算。然后对于 \(\sum_{j=0}^{B-1} [x^{iB+j}] F(x)G(x)^j\) 我们暴力计算,最后乘上 \(G(x)^{iB}\) 即可。总时间复杂度 \(O(n^2 + n \sqrt{n} \log n)\)

拉格朗日反演

现在我们讲讲复合逆。拉格朗日反演可以在 \(O(n \log n)\) 的时间求 \([x^n]G(x)\),其中 \(G(x)\) 满足 \(F(G(x)) = x\)\(F(x)\) 是已知的多项式,并且 \([x^0] F(x) = [x^0] G(x) = 0\)\([x^1] F(x) \neq 0\)\([x^1] G(x) \neq 0\)\(G(x)\) 也被称为 \(F(x)\) 的复合逆。

引理:若 \(F(G(x)) = x\),那么 \(G(F(x)) = x\)
证明:记 \(\mathbb{R}[\![x]\!]_{+}\) 为常数项为零且一次项非零的 \(\mathbb{R}\) 上形式幂级数。我们知道函数的复合是定义在形式幂级数环 \(\mathbb{R}[\![x]\!]\) 上的二元运算,即 \((F \circ G)(x) = F(G(x))\),其封闭性与结合性显然,所以构成半群。但 \(\mathbb{R}[\![x]\!]_{+}\) 具有更好的性质,下面我们将证明它在函数复合运算上构成群。引理等价于 \(G(x)\) 的左逆元等于右逆元,只要单位元 \(\epsilon\) 同时是左幺元和右幺元,并且左右逆元都存在时,便有如下性质:设 \(\alpha\) 存在左逆元 \(l\) 和右逆元 \(r\),则 \(l = l(\alpha r) = (l \alpha) r = r\)。显然 \(\mathbb{R}[\![x]\!]_{+}\) 的单位元 \(\epsilon(x) = x\) 满足性质,因此我们只需证明 \(G\) 的右逆元存在。使用待定系数法容易说明对于任意 \(A(x),B(x) \in \mathbb{R}[\![x]\!]_{+}\),方程 \(A(\delta(x)) = B(x)\)\(\delta(x) \in \mathbb{R}[\![x]\!]_{+}\) 存在唯一解,因此 \(G(x)\) 的右逆元一定存在。这就证明了结论。

\(G(x) = \sum_{i=1}^n g_i x^i\),代入 \(G(F(x)) = x\) 得:

\[\sum_{i=1}^n g_i \times F(x)^i = x \]

两边同时求导:

\[\sum_{i=1}^n i g_i F(x)^{i-1} F'(x) = 1 \]

我们只关注 \(n\) 次项,将它提出:

\[n g_n F(x)^{n-1} F'(x) + \sum_{i=1}^{n-1} i g_i F(x)^{i-1} F'(x) = 1 \]

两边同时除以 \(F(x)^n\) 得:

\[n g_n \frac{F'(x)}{F(x)} + \sum_{i=1}^{n-1} i g_i F(x)^{i-n-1} F'(x) = \frac{1}{F(x)^n} \]

注意到 \(F(x)^k\) 是 D-finite 的,对它求导得到 \((F(x)^k)' = kF(x)^{k-1}F'(x)\),即 \(F(x)^kF'(x) = \frac{(F(x)^{k+1})'}{k+1}\),代入上式:

\[ng_n \frac{F'(x)}{F(x)} + \sum_{i=1}^{n-1} g_i \frac{i}{i - n} (F(x)^{i-n})' = \frac{1}{F(x)^n} \]

不要忘记我们的目标是求出 \(g_n\),现在我们想办法把其他的系数全部消去。注意到,对于任意一个整系数多项式,其求导后 \(-1\) 次项的系数一定为 \(0\),因此我们将等式两边同时取 \(-1\) 次项:

\[[x^{-1}]ng_n \frac{F'(x)}{F(x)} = [x^{-1}] \frac{1}{F(x)^n} \]

对于等式右边:

\[[x^{-1}] \frac{1}{F(x)^n} = [x^{n-1}] \frac{x^n}{F(x)^n} = [x^{n-1}] \frac{1}{\big( \frac{F(x)}{x} \big)^n} \]

对于等式左边:

\[\begin{aligned} \frac{F'(x)}{F(x)} &= \frac{f_1 + 2f_2x + 3f_3x^2 + \cdots + nf_n x^{n-1}}{f_1x + f_2x + \cdots + f_n x^n} \\ &= \frac{f_1 + 2f_2x + 3f_3x^2 + \cdots + nf_n x^{n-1}}{f1x(1 + \frac{f2}{f1}x + \cdots + \frac{f_n}{f_1}x^{n-1})} \end{aligned} \]

\[p(x) = (1 + \frac{f2}{f1}x + \cdots + \frac{f_n}{f_1}x^{n-1})^{-1} \]

\[\begin{aligned} \frac{F'(x)}{F(x)} &= \frac{f_1 + 2f_2x + 3f_3x^2 + \cdots + nf_n x^{n-1}}{f_1x} p(x) \\ &= (x^{-1} + \frac{2f_2}{f_1} + \frac{3f_3}{f_1}x + \cdots + \frac{nf_n}{f_1}x^{n-2})p(x) \end{aligned} \]

由于 \([x^0]p(x) = 1\),于是

\[[x^{-1}] \frac{F'(x)}{F(x)} = 1 \]

于是

\[ng_n = [x^{n-1}] \frac{1}{\big( \frac{F(x)}{x} \big)^n} \]

\[g_n = \frac{1}{n} [x^{n-1}] \frac{1}{\big( \frac{F(x)}{x} \big)^n} \]

多项式快速幂 + 多项式求逆即可。

扩展拉格朗日反演

扩展拉格朗日反演可以在 \(O(n \log n)\) 的时间求 \([x^n]G(x)\),其中 \(G(x)\) 满足 \(F(G(x)) = H(x)\)\(F(x)\)\(H(x)\) 是已知的多项式。推导过程和拉格朗日反演完全一致,因此这里不再赘述了。结果是:

\[g_n = \frac{1}{n} [x^{n-1}] \frac{H'(x)}{\big( \frac{F(x)}{x} \big)^n} \]

事实上,可以认为拉格朗日反演是扩展拉格朗日反演中 \(H(x) = x\) 的一种特殊情况。

多项式复合逆

\(n-1\) 次多项式 \(F(x)=\sum\limits _{i=0}^{n-1} a_ix^i\)。给定 \(n\)\(F(x)\) 的各项系数,要求一个 \(n-1\) 次多项式 \(G(x)\) 满足:

\[G(F(x))\equiv x\pmod{x^n} \]

做法

上面提到的拉格朗日反演公式可以求出 \(G(x)\) 的一项系数,但现在我们要求所有系数。按照求多项式复合的方式做,令 \(B = \sqrt{n}\)

\[\begin{aligned} G(x) &= \sum_{i=1}^n \big( \frac{1}{i} [x^{i-1}] \frac{1}{\big( \frac{F(x)}{x} \big)^i} \big) x^i \\ &= \sum_{i=0}^{B-1} \sum_{j=1}^B \big( \frac{1}{iB + j} [x^{iB + j}] \frac{1}{\big( \frac{F(x)}{x} \big)^{iB + j}} \big) x^{iB + j} \\ &= \sum_{i=0}^{B-1} \sum_{j=1}^B \big( \frac{1}{iB + j} [x^{iB + j}] (\frac{x}{F(x)})^{iB} (\frac{x}{F(x)})^j \big) x^{iB + j} \end{aligned} \]

预处理出所有 $ (\frac{x}{F(x)})^{iB}$ 及 \((\frac{x}{F(x)})^j\),这部分用 NTT 计算。计算 \([x^{iB + j}] (\frac{x}{F(x)})^{iB} (\frac{x}{F(x)})^j\) 这部分相当于给两个多项式,求出他们乘积的某一项系数,直接暴力即可。总时间复杂度 \(O(n^2 + n \sqrt{n} \log n)\)

posted @ 2022-07-08 13:35  came11ia  阅读(617)  评论(0编辑  收藏  举报