快速傅立叶变换(FFT)
多项式 系数表示法 设 \(f(x)\) 为一个 \(n-1\) 次多项式,则 \(f(x)=\sum\limits_{i=0}^{n-1}a_i*x^i\) 其中 \(a_i\) 为 \(f(x)\) 的系数,用这种方法计算两个多项式相乘(逐位相乘)复杂度为 \(O(n^2)\) 点值表示法 根据 小学知识 ,一个 \(n-1\) 次多项式可以唯一地被 \(n\) 个点确定 即,如果我们知道了对于一个多项式的 \(n\) 个点 \((x_1,y_1),(x_2,y_2)……(x_n,y_n)\) 那么这个多项式唯一满足,对任意 \(1\le i \le n\) ,满足 \(y_i=\sum\limits_{j=0}^{n-1}a_j*x_i^j\) 那么用点值实现多项式相乘是什么复杂度呢? 首先我们需要选 \(n\) 个点,每个点需要求出其在多项式中的值,复杂度为 \(O(n^2)\) 然后把两个点值表示的多项式相乘,由于 \(c(x_i)=a(x_i)*b(x_i)\) ,复杂度为 \(O(n)\) 最后插值法用点值求出系数,复杂度为 \(O(n^2)\) (我还不会插值) 考虑如果可以快速实现点值转系数和系数转点值,岂不是可以快速计算多项式乘法(说的简单,你倒是告诉我怎么快速转化啊) 前置芝士 复数 定义虚数单位 \(i=\sqrt{-1}\) , \(a,b\) 为实数