FFT与NTT

快速傅立叶变换 FFT

对于两个多项式

$$A(x)=\sum_{i=0}^{N-1}a_ix^i$$

$$B(x)=\sum_{i=0}^{N-1}b_ix^i$$

FFT可以在$O(nlgn)$的时间内求出

$$C(x)=A(x)*B(x)=\sum_{i=0}^{2(N-1)}c_ix^i$$

其中$c_i=\sum_{j=0}^ia_jb_{i-j}$

前置知识

在复数域下,方程$x^n=1$有$n$个解$\omega_N^i,(i=1\dots N)$

其中

$$\omega_N^i=(\cos\frac{2\pi i}{N}, \sin\frac{2\pi i}{N})$$

可以看作是平面直角坐标系中单位圆上间距相等的$N$个点

然后可以自己去学习一下复数)一下qwq

假如把复数用极坐标表示

$z=r(\cos \varphi+i\sin \varphi)$

那么复数的乘法就是模长($r$)相乘,幅角($\varphi$)相加

单位根有如下性质:

$$\omega_N^i\omega_N^j=\omega_N^{i+j}$$

$$\omega_N^i=\omega_N^{N+i}$$

$$\omega_N^{\frac{N}{2}}=-1$$

$$\omega_N^i=\omega_{cN}^{ci}$$

DFT

我们尝试将$N$下的单位根代入多项式得到$N$个值

也就是

$$F:{a_0,a_1,\dots a_{N-1}} \to {A(\omega_0),A(\omega_1),\dots A(\omega_{N-1})}$$

显然,可以在$A,B$中补$0$使得$N=2^k(k\in \mathbb{N})$

考虑分治

对于$0\leq i < \frac{N}{2}$

$$
\begin{aligned}
A_i&=\sum_{j=0}^{N-1}a_j\omega_N^{ij}
\
A_{i+\frac{N}{2}}&=\sum_{j=0}^{N-1}a_j\omega_N^{(i+\frac{N}{2})j}=\sum_{j=0}^{N-1}(-1)^ja_j\omega_N^{ij}
\end{aligned}
$$

将$\sum$中的奇偶项分开来

$$
\begin{aligned}
A_i&=\sum_{j=0}^{\frac{N}{2}-1}a_{2j}\omega_{\frac{N}{2}}^{ij}+\omega_N^i\sum_{j=0}^{\frac{N}{2}-1}a_{2j+1}\omega_{\frac{N}{2}}^{ij}
\
A_{i+\frac{N}{2}}&=\sum_{j=0}^{\frac{N}{2}-1}a_{2j}\omega_{\frac{N}{2}}^{ij}-\omega_N^i\sum_{j=0}^{\frac{N}{2}-1}a_{2j+1}\omega_{\frac{N}{2}}^{ij}
\end{aligned}
$$

非常奇妙是不是?这样就可以分治下去啦

IDFT

与DFT类似

只不过将DFT中的每个$\omega$都变成$\omega^{-1}$,然后最后每个$A_i$都除以$N$

代入进去显然可以发现是对的。

如果要严格说明是唯一的话就要用线性代数中的Vandermonde矩阵了。。

这里就不写了,感兴趣的可以去了解一下,《算法导论》里讲的也挺详细的

例题

来自衲姐NiroBC的例题(Orz)

给一个$N$位的$B$进制数$A$,将它转为十进制。($N,B\leq 10^5$)

考虑分治

对于$N$位的$B$进制数,

设$M=2^k\leq \frac{N}{2}$

假如我们已经求出了$\sum_{i=0}^{M-1}A_iB^i$的十进制数以及$\sum_{i=0}^{N-M-1}A_{i+M}B^i$的十进制数

那么就可以用FFT将$\sum_{i=0}^{N-M-1}A_{i+M}B^i$乘上$B^M$

其中$B^M$的十进制数也可以用FFT预处理

时间复杂度为$O(nlg^2n)$

快速数论变换 NTT

NTT与FFT大体上十分相似

主要是因为FFT涉及许多实数运算,因此很容易丢精

当需要对所求的多项式对$M$取模时,NTT就是一个非常好的选择

欧拉定理):
若$n,a$为正整数,且$n,a$互素(即$\gcd(a,n)=1$),则
$$a^{\varphi(n)}\equiv 1 \quad (mod\; n)$$

NTT一般用于$M$是质数的情况,因此在这里费马小定理:

费马小定理
假如$a$是一个整数,$p$是一个质数
$$a^{p-1}\equiv 1 \quad (mod\; p)$$

原根$G$,满足集合${G^0, G^1, G^2, \cdots, G^{\varphi(M) - 1}}$中含有了所有与$M$互质的数。

若$M$可以表示成$2^k*t+1$, 其中$t$是奇数

那么对于小于$2^k$的$N$,$G^{\frac{M-1}{N}}$都可以作为单位元$w$,其他就和FFT没什么区别了

参考资料

  1. http://nirobc.com/20181205.pdf

  2. http://nirobc.com/20181212.pdf

  3. http://blog.miskcoo.com/2015/04/polynomial-multiplication-and-fast-fourier-transform

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×