FFT [TPLY]
题目链接
https://www.luogu.org/problemnew/show/1919
https://www.luogu.org/problemnew/show/3803
资料推荐
orz大佬博客
http://www.cnblogs.com/cjoieryl/p/8206721.html (orz YL大佬)
http://blog.csdn.net/iamzky/article/details/22712347 (超级易懂)
知识点
复数:
https://baike.baidu.com/item/%E5%A4%8D%E6%95%B0/254365?fr=aladdin
单位根(单位复数根)
https://baike.baidu.com/item/%E5%8D%95%E4%BD%8D%E6%A0%B9
多项式表示
http://blog.csdn.net/acdreamers/article/details/39005227
卷积
http://blog.csdn.net/bitcarmanlee/article/details/54729807
书籍推荐
ACM/ICPC 算法基础训练教程 7.4快速傅里叶变换
算法导论 30章多项式与快速傅里叶变换
觉得看不懂很正常,知识点很抽象需要逐步理解
而对于本文,本文作用为对两位大佬内容解读并且加入自己看法
读者可以先花时间阅读以上推荐的文字,产生一定理解再读本文.由于作者很弱,可能会产生错误,还请大神帮忙指出.
正文
FFT作用
作用:求多项式乘法的系数(就是初中学的多项式)
FFT多项式乘法与普通形式有差异
一般多项式乘多项式法则:
多项式与多项式相乘,先用一个多项式的每一项与另一个多项式的每一项相乘,再把所得的积相加。
由多项式乘多项式法则可以得到(a+b)(c+d)=a(c+d)+b(c+d)=ac+ad+bc+bd
而FFT相当于‘绕了一个圈‘,
先从多项式最普通的表达形式---系数表达形式
转化成点值表达形式
(我的理解 : 点值表达形式就是用若干函数上的点的坐标来表示该函数,比如 f(x)=x^2-x+2={ ( 0 , 2 ) , ( 1 , 2 ) , ( 2 , 4 ) })
再进行点值表达式的运算,也就是点值乘法
最后,再将点值乘法的结果转回系数表达形式
就像绕了一个大圈
图片如下:(借鉴他人博客)