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

【算法专题】多项式相关。

时间:2018-02-04 00:27:34      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:恢复   href   专题   idt   枚举   title   倒数   特点   bsp   

---恢复内容开始---

【快速傅里叶变换】

参考:从多项式乘法到快速傅里叶变换 by miskcoo

FFT 学习笔记 by Menci

特点:FFT用于O(n log n)解决多项式乘法。

(一)多项式的表示法

系数表示法:f(x)=a[n-1]*x^(n-1)+...+a[0],称为n-1次多项式。

点值表示法:一个n-1次多项式在复数域中有n个根,即n个(x,y)可以唯一确定一个n-1次多项式。

对于一个多项式,从其系数表示法到其点值表示法的变换称为离散傅里叶变换(DFT),反之称为傅里叶逆变换(IDFT)。

朴素的离散傅里叶变换,枚举实现的复杂度为O(n^2)。

快速傅里叶变换是指以O(n log n)的复杂度实现IDF和IDFT的算法,常用Cooley-Tukey算法。

(二)复数

复数是形如a+bi的数字,当b=0时为实数,b≠0时为虚数,a=0时为纯虚数。

定义一个平面为复平面,那么平面内的每个点(a,b)唯一对应一个复数a+bi,i可以理解为y轴上的单位长度,正如1是x轴上的单位长度。

i的本质是在数轴上定义旋转变换,i是1逆时针旋转90°,那么i^2=-1。

复数相加,遵循平行四边形定则。

复数相乘,模长相乘,幅角相加。

(三)单位根

以圆点为起点,以复平面单位圆的n等分点为终点,作n个向量,设所得幅角为正且最小的向量对应的复数为ω(1,n),即n次单位根。(括号左为上标,右为下标)。

技术分享图片图片来源:OI 中的 FFT by zball

其中B点是单位根ω(1,n),逆时针依次为ω(2,n),ω(3,n)...,ω(n,n)=ω(n,0)=1。

计算公式:ω(k,n)=cos ( 2kπ/n ) + i*sin ( 2kπ/n )

单位根的性质:

(1)消去:ω(2n,2k)=ω(n,k)

(2)折半:ω(n,k+n/2)=-ω(n,k)

将ω(n,0)~ω(n,n-1)这n个单位根作为代表n-1次多项式的n个点的横坐标,可以得到很好的性质。

(四)快速傅里叶变换(FFT解决DFA)

这部分因为不会操作数学公式,直接粘贴Menci博客QAQ。

我是图.jpg

将n-1次多项式A(x)的系数奇偶分成两个多项式A1(x)和A2(x),则A(x)=A1(x^2)+x*A2(x^2)。

对于k<n/2,有A(ω(n,k))=A1(ω(n/2,k)) + ω(n,k)*A2(ω(n/2,k))

同时,有A(ω(n,k+n/2))=A1(ω(n/2,k)) ω(n,k)*A2(ω(n/2,k))

对于一个k次多项式,通过奇偶分项得到两个k/2次多项式,分别计算后再调用其值解决k次多项式,即分治解决。

(五)傅里叶逆变换(IDFA)

对于n-1次多项式,其n-1维系数向量{a0,a1...an-1}通过DFA得到点值向量{b0,b1...bn-1},反之操作称为IDFA。

将点值向量作为系数,以单位根的倒数进行FFT,得到的每个数除以n,就是IDFA的结果。

(六)迭代实现FFT

 

---恢复内容结束---

【算法专题】多项式相关。

标签:恢复   href   专题   idt   枚举   title   倒数   特点   bsp   

原文地址:https://www.cnblogs.com/onioncyc/p/8410969.html

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