python123求多项式的值_大数乘法—多项式与快速傅里叶变换

本章涉及知识点:

1、多项式乘法的时间复杂度

2、多项式的表示:系数

3、多项式的表示:点值

4、复数的表示

5、单位复数根

6、单位复数根的性质—消去引理

7、单位复数根的性质—折半引理

8、离散傅里叶变换:DFT和IDFT

9、快速傅里叶变换:FFT

10、FFT求解多项式乘法的步骤

11、python编程实战FFT大数乘法

12、结果分析

一、多项式乘法的时间复杂度

数学中,我们可以将任意一个n位的数字写为一个n-1次多项式,如456可以写为

f522b6ee93fd

数字转为多项式

即可抽象定义出以x为变量的多项式函数A(x)

f522b6ee93fd

多项式函数

其中aj表示:长度为N-1位数字的第j为数字

例如要计算456 * 123 = ?,则我们用多项式A(x)和B(x)来分别表示其各自的数字,C(x)表示两个多项式的乘积

f522b6ee93fd

两个数字的多项式

由乘法的运算规则,两个数的每一位数字都要与另一个数的每一位相乘,最后相加同一位上所有的数字,得到乘积中该位的数字,即

f522b6ee93fd

多项式乘法

将x=10为基带入结果,即可以得到456 * 123 = 4 * 10**4 + 13 * 10**3 + 28 * 10**2 + 27 * 10 + 18 = 56088

我们可以归纳出乘积C(x)的每一位数字的计算关系为

f522b6ee93fd

乘积数位的计算

其中cj表示:乘积数中的第j位的数字

则乘积多项式C(x)可以写为

f522b6ee93fd

乘积多项式

至此我们可以看到,由于受限于乘法运算自身的规则,计算两个多项式乘积(将数字转换为多项式)的时间复杂度为:

math?formula=O(n%5E%7B2%7D),当n很大的时候复杂度将非常高

那么需要研究的问题就是:有没有方法可以高效的提高多项式乘法复杂度呢?

二、多项式的表示:系数

为了降低多项式乘法的复杂度,我们首先需要了解几个数学知识

从多项式函数的定义,我们将所有系数视为系数向量,而由全部系数组成的向量a叫做该多项式的系数表达

f522b6ee93fd

系数表达

PS:乘积多项式C(x)的系数向量cj,也称输入向量a和b的卷积,记为

f522b6ee93fd

卷积运算

从之前的分析可知,要计算出乘积C(x)的每一个系数向量cj,需要的时间复杂度为

math?formula=O(n%5E%7B2%7D)

三、多项式的表示:点值

我们任意选取n个不同的自变量x带入多项式函数A(x)进行求值运算,将得到n个不同数值的y,即

f522b6ee93fd

求值运算

则多项式的点值表达就是由这n个数值点组成的集合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值