码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-04-08 00:00:41      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:加法   结合   概述   lin   变换   sum   方法   复杂   log   

多项式

一个\(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,t\in 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\)

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

标签:加法   结合   概述   lin   变换   sum   方法   复杂   log   

原文地址:https://www.cnblogs.com/wlzhouzhuan/p/12657174.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!