[算法学习] 多项式全家桶

Posted wlzhouzhuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[算法学习] 多项式全家桶相关的知识,希望对你有一定的参考价值。

多项式

一个(n)次多项式可以表示为(A(x)=sum_{i=0}^{n}a_i x^i),另一个(n)次多项式可以表示为(B(x)=sum_{i=0}^{n}b_i x^i)

  • 多项式加法
    (A(x))(B(x))相加,得到多项式(C(x)=sum_{i=0}^{n} (a_i+b_i) x^i)
    复杂度是(O(n))的。
  • 多项式乘法
    (A(x))(B(x))相乘,得到多项式(C(x)=sum_{i=0}^{n}sum_{j=0}^{n}a_ib_jx^{i+j})
    复杂度是(O(n^2))的,不是很优,于是我们决定想办法来解决它。

快速傅里叶变换 (FFT)

概述

快速傅里叶变换,英文名(Fast Fourier Transform),它可以在(O(nlog(n)))的复杂度内完成多项式乘法

前置技能

函数的表达方法

  • 系数表达法
    通过(a_0,a_1,...,a_n)来表示函数(f(x)=sum_{i=0}^{n}a_ix^i)
  • 点值表达法
    选取平面上(n+1)个不同的点来表示函数(f(x)={ (x_0,y_0), (x_1,y_1), ..., (x_n, y_n)})

我们发现,通过点值表达法,我们可以在(O(n))的复杂度内计算出(C(x)),于是我们考虑将系数点值结合起来。

单位复数根

在复平面上,单位圆有一些其妙的性质:
我们默认(n=2^t,tin N)

  • (w_n^k=w_{2n}^{2k})
  • (w_n^{k+frac{n}{2}}=-w_n^k)
  • (w_n^k=w_n^{k+n})
  • 对于任意(k),均满足(sum_{j=0}^{n-1}(w_n^k)^j=0)

以上是关于[算法学习] 多项式全家桶的主要内容,如果未能解决你的问题,请参考以下文章

书籍推荐:大数据全家桶:Hadoop,Spark,Strom,Druid实战,机器学习算法

算法模板:数论之质数全家桶(内含埃氏筛法,欧拉线性筛法详解)沈七

多项式全家桶

多项式全家桶

多项式全家桶

多项式全家桶