博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FFT理解
阅读量:5059 次
发布时间:2019-06-12

本文共 711 字,大约阅读时间需要 2 分钟。

近日理解了一下多项式快速乘法,浅谈一下自己的感受;

用处:在进行多项式乘法时,将O(n2)的复杂度优化到O(nlog2n)的复杂度,而这在一些例如高精度乘法,生成函数的题目中不可或缺;

具体实现:

由于多项式在系数表示进行乘法的时候,复杂度为O(n2),在点值表示进行乘法的时候,复杂度为O(n);

很自然的,我们想到,先设法将系数表示转化为点值表示,在进行完乘法后,再转移回系数表示,而实际算法也是这么做的;

a:[系数数组]->[点值数组]->

b:[系数数组]->[点值数组]->乘法->c:[点值数组]->[系数数组]

所以我们现在要解决的问题是:

1.系数->点值

选n个xi,求A(x[i]),由于有秦九韶算法,单次O(n),n次O(n2),boom了;

考虑对x[i]进行限制,普通的无规律的求A(x[i])自然是要O(n2),但问题是x[i]目前不固定,我们可以自己决定;

这需要挖掘多项式的一些性质:(比如下面这个)

A(xi)=次数为偶数的系数数组AL(xi2)+xi*次数为偶数的系数数组AR(x[i]2)

A(-xi)=次数为偶数的系数数组AL(xi2)-xi*次数为偶数的系数数组AR(x[i]2)

 

从这个式子,我们可以清晰地看出,算出AL(xi2),和AR(xi2)可以得到两个点值,这样就可以不断递归,O(nlogn);

2.点值->系数

经过数学变换(自己推),可以发现点值与系数的关系式与带入多项式求值的关系式非常相似;

可以把点值看成多项式的系数,再次FFT,最后即可得到答案;

 

转载于:https://www.cnblogs.com/chadinblog/p/6297580.html

你可能感兴趣的文章
Android内核sysfs中switch类使用实例
查看>>
POJ2288 Islands and Bridges(TSP:状压DP)
查看>>
POJ3250 Bad Hair Day(单调栈)
查看>>
[No0000195]NoSQL还是SQL?这一篇讲清楚
查看>>
IOS开发UI篇--UITableView的自定义布局==xib布局
查看>>
【深度学习】caffe 中的一些参数介绍
查看>>
Python-Web框架的本质
查看>>
Unrecognized Windows Sockets error: 0: JVM_Bind 异常解决办法
查看>>
struts2中<s:form>的应用
查看>>
QML学习笔记之一
查看>>
7NiuYun云存储UploadPicture
查看>>
Window 的引导过程
查看>>
python与 Ajax跨域请求
查看>>
Java实体书写规范
查看>>
App右上角数字
查看>>
从.NET中委托写法的演变谈开去(上):委托与匿名方法
查看>>
六、PowerDesigner 正向工程 和 逆向工程 说明
查看>>
小算法
查看>>
201521123024 《java程序设计》 第12周学习总结
查看>>
贪吃蛇游戏改进
查看>>