FFT与多项式乘法

本文参考文献:

Polynomial Multiplication (Vector Convolution) and FFT

多项式 I:拉格朗日插值与快速傅里叶变换 - 洛谷专栏

前言

通常两个多项式相乘所需的时间复杂度是 Θ(n^2),使用FFT算法可以将多项式乘法的时间复杂度降为\Theta (nlog_2n)

1.多项式表示方法

这节介绍两种表示多项式的方法:系数表达和点值表达。

1.3.1. 系数表达

对一个次数界为 n 的多项式  f(x) = a_{0} + a_{1}* x + ...+ a_{n-1}* x^{n-1} 而言,其系数表达是一个由系数组成的向量a = (a_{0}, a_{1}, ..., a_{n-1})  。

采用系数表达对于多项式的某些运算是很方便的。例如,对多项式 f(x) 在给定点x_{0}的求值运算就是计算 f(x_{0}) 的值。使用霍纳法则,我们可以在 Θ(n) (n-1次乘法和n-1次加法)时间复杂度内完成求值运算:

f(x_0) = a_0 + x_0(a_1+x_0(a_2+...+x_0(a_{n-2} + x_0(a_{n-1})...))

1.3.1.1多项式的运算

假设有多项式f(x)和g(x):

f(x)的系数是 a = (a_{0}, a_{1}, ..., a_{n-1}),

 g(x)的系数是 b = (b_{0}, b_{1}, ..., b_{n-1}),

1.加法运算:

在系数表示形式下,求两个多项式的加法是很容易的。

h(x) = f(x) + g(x),假设h(x)的系数是 c = (c_{0}, c_{1}, ..., c_{n-1}),显然有c_i = a_i + b_i

因此计算h(x)的计算复杂度是 Θ(n) 。

2.乘法运算

h(x) = f(x) * g(x),则h(x) = (\sum_{i=0}^{n-1} a_{i}x_{i})*(\sum_{j=0}^{n-1} b_{j}x_{j})=\sum_{i=0}^{2n-2}(\sum_{j=0}^{i}a_jb_{i-j})*x_{i},

因此计算复杂度是 Θ(n^2) (需要进行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值