问题引入:快速求多项式乘法
定义1.1 一个形如:
A(x)=∑i=0n−1aixi
的函数被称为一个多项式的 系数表达 。系数表达多项式的加,乘和除我们在小学和初中已经学习过,这里不再赘述。
系数表达的好处有:
- 直观。我们所用的进位制就是使用多项式的系数表达。
- 方便求值。利用霍纳法则(秦九韶算法)可以方便的在O(n)求得多项式的值。
但缺点也有:
- 难以计算两个多项式的乘积。
朴素的算法需要 O(n2) 时间才能计算多项式的乘积,一个简单的分治算法则可以在 O(nlg7) 内算出。为了提高效率,我们引入多项式的 点值表达 的概念:
定义1.2 对于多项式A(x),形如:
B={
(x0,A(x0)),(x1,A(x1)),(x2,A(x2)),…,(xn−1,A(xn−1))},满足∀a≠b,xa≠xb
的表达称为多项式A以 { x0,x1,...,xn−1} 为基的点值表示。
由线性代数的知识可以知道,一个点值表示至多有一个多项式与之对应。但 xi 的选择是任意的,而且不会影响计算。
对于点值表示,计算多项式乘积就简单了许多:选取同一组 xi ,将对应的 yi 相乘即可。那么我们有了一个计算多项式值的初步思路:
- 将多项式A, B转化为点值表达
- 点值乘法
- 将点值表示转换回系数表示
单位复数根
定义2.1 复平面上 xn=1