概述

A\mathbb{A} 是一个交换环, f,gA[x]f,g\in \mathbb{A}[x] 满足次数小于 nn ,需要快速求出 f(g(x))modxnf(g(x))\bmod x^n

M(n)M(n) 是两个次数小于 nnA[x]\mathbb{A}[x] 中的元素相乘所需的时间复杂度。

1978:Brent-Kung 算法。O(M(n)nlogn)O(M(n)\sqrt{n\log n})

2008: Kedlaya ,Umans 提出的算法。

只能在 FqF_q 下面做,O~(n2O(lognloglogn)logq)\widetilde{O}(n2^{O(\sqrt{\log n\log \log n})}\log q)

2023: Neiger,Salvy 等人提出的算法。O(n1.43)O(n^{1.43})

2024:Yasunori Kinoshita 和 Baitian Li 在 FOCS 2024 提出了一个简单、高效的算法。

Bostan-Mori,Power Projection

对于项数小于 nnf,gA[x]f,g\in A[x],求 [xm]f(x)g(x)[x^m]\frac{f(x)}{g(x)}

f(x)g(x)=f(x)g(x)g(x)g(x)\frac{f(x)}{g(x)}=\frac{f(x)g(-x)}{g(x)g(-x)}

设 $f(x)g(-x)=a_0 x^{0}+a_1 x^{1}+\dots $。提取出其奇数项和偶数项,记 f0(x)=a0x0+a2x1+a4x2+,f1(x)=a1x0+a3x1+a5x2+f_0(x)=a_0x^0+a_2x^1+a_4x^2+\dots,f_1(x)=a_1x^0+a_3x^1+a_5x^2+\dots

g(x)g(x)g(x)g(-x) 是偶函数,令 p(x)=xi[x2i]g(x)g(x)p(x)=\sum x^i[x^{2i}]g(x)g(-x)

[xm]f(x)g(x)=[xm2]fmmod2(x)p(x)[x^m]\frac{f(x)}{g(x)}=[x^{\lfloor{\frac{m}{2}}\rfloor}]\frac{f_{m\bmod 2}(x)}{p(x)}

算法复杂度 O(M(n)logm)O(M(n)\log m)

现在我们解决以下问题:给定项数小于 nnfA[x]f\in \mathbb{A}[x] ,求出 [xn]f0(x),[xn]f1(x),,[xn]fn(x)[x^n]f^0(x),[x^n]f^1(x),\dots,[x^n]f^n(x)

等价于求 [xn]11yf(x)[x^n]\frac{1}{1-yf(x)} 。采用类似的思路。

可以看成是两个二元多项式 f(x,y),g(x,y)A[x,y]f(x,y),g(x,y)\in \mathbb{A}[x,y] ,求 [xn]f(x,y)g(x,y)[x^n]\frac{f(x,y)}{g(x,y)}

f0(x,y),f1(x,y)f_0(x,y),f_1(x,y)f(x,y)g(x,y)f(x,y)g(-x,y) 关于 xx 提取偶数项,奇数项的结果。

p(x,y)p(x,y)g(x,y)g(x,y)g(x,y)g(-x,y) 关于 xx 提取偶数项后的结果。

[xn]f(x,y)g(x,y)=[xn2]fnmod2(x,y)p(x,y)[x^n]\frac{f(x,y)}{g(x,y)}=[x^{\lfloor{\frac{n}{2}}\rfloor}]\frac{f_{n\bmod 2}(x,y)}{p(x,y)}

递归到 [x0]f(x,y)g(x,y)[x^0]\frac{f(x,y)}{g(x,y)} 的时候直接求 [x0]f(x,y)[x0]g(x,y)\frac{[x^0]f(x,y)}{[x^0]g(x,y)} 就好了。

分析一下上述算法的时间复杂度。

递归 ii 轮后 f(x,y),g(x,y)f(x,y),g(x,y)xx 的次数不超过 n2i\frac{n}{2^i}yy 的次数不超过 2i2^i

递归 logn\log n 轮,复杂度 O(M(n)logn)O(M(n)\log n)

基于转置原理的方法

转置原理:对于一个 n×nn×n 的矩阵 AA

若存在一个算法可以对任意长度为 nn 的列向量 bb 计算出 AbAb

那么一定存在一个算法能够以相同的效率计算 ATbA^Tb

回顾我们的问题,设矩阵 ATA^T 满足 Ai,j=[xi]gj(x)A_{i,j}=[x^i]g^j(x)ff 形成的列向量为 bb 。则需要计算 ATbA^Tb

只需要思考 AbAb 的求法即可,即计算 aj=biAi,j=bi[xi]gj(x)a_j=\sum b_iA_{i,j}=\sum b_i[x^i]g^j(x)

h(x)=bixnih(x)=\sum b_ix^{n-i} ,则 aj=[xnyj]h(x)1yg(x)a_j=[x^ny^j]\frac{h(x)}{1-yg(x)}

使用 Bostan-Mori 即可。

不需要转置原理的方法

P(y)=ynf(y1),Q(x,y)=1yg(x)P(y)=y^nf(y^{-1}),Q(x,y)=1-yg(x) ,则:

f(g(x))=i=0n([yi]f(y))g(x)i=[yn]ynf(y1)11yg(x)=[yn]P(y)Q(x,y)f(g(x))=\sum\limits_{i=0}^n ([y^i]f(y))g(x)^i= [y^n]y^nf(y^{-1})\frac{1}{1-yg(x)}=[y^n]\frac{P(y)}{Q(x,y)}

Fl,r(Q(x,y))=i=lr1yil[yi]Q(x,y)\mathcal{F} _{l,r}(Q(x,y))=\sum\limits_{i=l}^{r-1} y^{i-l}[y^i]Q(x,y),则我们希望求出 Fn,n+1(P(y)Q(x,y))modxn\mathcal{F}_{n,n+1}(\frac{P(y)}{Q(x,y)})\bmod x^n

思考 Fl,r(P(y)Q(x,y))modxn\mathcal{F}_{l,r}(\frac{P(y)}{Q(x,y)})\bmod x^n 的求法。

n=1n=1 时,答案即 Fl,r(P(y)Q(0,y))\mathcal{F}_{l,r}(\frac{P(y)}{Q(0,y)})

n>1n>1 时,考虑

Fl,r(P(y)Q(x,y))modxn=Fl,r(P(y)Q(x,y)Q(x,y)Q(x,y)modxnmodyr)modxn=Fl,r(P(y)V(x2,y)Q(x,y))modxn:=u\mathcal{F}_{l,r}(\frac{P(y)}{Q(x,y)})\bmod x^n=\mathcal{F}_{l,r}(\frac{P(y)Q(-x,y)}{Q(x,y)Q(-x,y)\bmod x^n\bmod y^r})\bmod x^n=\mathcal{F}_{l,r}(\frac{P(y)}{V(x^2,y)}Q(-x,y))\bmod x^n:=u

其中 V(x2,y)=Q(x,y)Q(x,y)modxnmodyrV(x^2,y)=Q(x,y)Q(-x,y)\bmod x^n\bmod y^r

e=max(0,ldegyQ(x,y))e=\max(0,l-deg_y Q(x,y))

u=Fl,r(yeFe,r(P(y)V(x2,y))Q(x,y))modxn=Fle,re(Fe,r(P(y)V(x2,y))Q(x,y))modxn=Fle,re(Fe,r(P(y)V(z,y))modzn2z=x2Q(x,y))modxnu=\mathcal{F}_{l,r}\left(y^e\mathcal{F}_{e,r}(\frac{P(y)}{V(x^2,y)})Q(-x,y)\right)\bmod x^n=\mathcal{F}_{l-e,r-e}\left(\mathcal{F}_{e,r}(\frac{P(y)}{V(x^2,y)})Q(-x,y)\right)\bmod x^n=\mathcal{F}_{l-e,r-e}\left(\mathcal{F}_{e,r}(\frac{P(y)}{V(z,y)})\bmod z^{\lceil{\frac{n}{2}}\rceil}|_{z=x^2}Q(-x,y)\right)\bmod x^n

递归计算 Fe,r(P(y)V(x,y))modxn2\mathcal{F}_{e,r}(\frac{P(y)}{V(x,y)})\bmod x^{\lceil{\frac{n}{2}}\rceil} 即可。

可以发现递归至第 i+1i+1 轮时,degxQ(x,y)n2i,degyQ(x,y)2i,rl2ideg_xQ(x,y)\le \frac{n}{2^i},deg_yQ(x,y)\le 2^i,r-l\le 2^i

复杂度 O(M(n)logn)O(M(n)\log n)

n=1n=1 时不需要对多项式进行求逆。

设初始的分母为 Q0(x,y)Q_0(x,y)

考虑递归 dd 轮后 Qd(x,y)=(Q0(x,y)Q0(x,y))2d1Q_d(x,y)=(Q_0(x,y)Q_0(-x,y))^{2^{d-1}} ,则 Qd(0,y)=Q0(0,y)2dQ_d(0,y)=Q_0(0,y)^{2^d}

代入 Q0(0,y)=1yg(0)Q_0(0,y)=1-yg(0) ,得到 1(1yg(0))2d=i0(yg(0))i(2d1+ii)\frac{1}{(1-yg(0))^{2^d}}=\sum\limits_{i\geq 0}(yg(0))^i\tbinom{2^d-1+i}{i}

这就说明了为什么对任何交换环 A\mathbb{A} ,这个算法都可以计算 f,gA[x]f,g\in \mathbb{A}[x] 时的 f(g(x))f(g(x))

总结

两个做法都是将问题转化为求二元分式的某项值,然后通过类似 Bostan-Mori 的算法求解。

但又存在一定区别:一个需要计算 [xn]h(x)1yg(x)[x^n]\frac{h(x)}{1-yg(x)} ,一个需要计算 [yn]h(y)1yg(x)[y^n]\frac{h(y)}{1-yg(x)} ,所以具体步骤存在很多不同。