多项式全家桶

只谈情不闲聊 提交于 2019-11-30 23:21:08

写在前面

我多项式实在是太菜了,所以必须写一篇博客来巩固一下。。。


多项式乘法与卷积

对于给定的两个多项式
\[ F(x),G(x) \]
我们称
\[ S(x)=\sum_k\sum_{i+j==k}F(i)G(j) \]
\(F,G\)的卷积。不难证明,这就是多项式乘法,即
\[ F(x)G(x)=\sum_k\sum_{i+j==k}F(i)G(j) \]
(简单地说,\(F,G\)的乘积中次数为\(k\)的项系数为
\[ \sum_{i+j==k}F(i)G(j) \]
计算\(F,G\)的卷积显然有\(O(n^2)\)的朴素思路,但是对于较高的数据范围这样的时间复杂度是无法接受的。


多项式的点值表达

除了常见的系数表达以外,多项式还可以用点值表达来表示。

对于已知次数为\(n\)的多项式\(F(x)\),我们可以用
\[ X=\{(x_1,F(x_1)),(x_2,F(x_2),...,(x_{n+1},F(x_{n+1})))\} \]
来唯一确定其系数表达式。证明可以由代数基本定理推出。

多项式的点值表达相对于系数表达有一个优点:在计算卷积时时间复杂度缩减为\(O(n)\)。更准确地说,有
\[ S(x)=\{(x_1x_2,F(x_1)G(x_2))...\}=F(x)G(x) \]
但是将系数表达转换为点值表达的过程仍然是\(O(n^2)\)的,于是我们想到对这个过程进行优化。


FFT

快速傅里叶变换能够在\(O(nlogn)\)的时间内解决系数表达到点值表达的过程,是因为引入了单位根的概念。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!