张家琳
复旦大学附属中学
引言
多项式是最基本的数学工具之一,由于其形式简单,且易于
用计算机对其进行各种计算,在当今的社会中应用越来越广。不
仅在像Maple这样的数学软件中有着举足轻重的作用,在工程、
信息等诸多领域中都有着广阔的应用。
下面我们给出几个多项式逼近的例子:
ln(
x
1)
x
sin
x
x
3
x
3!
2
x
2
5
x
5!
3
x
3
7
x
7!
c o s
x
1
2
x
2 !
4
x
4 !
6
x
6 !
( 1)
n
2
n
x
( 2 ) !
n
4
x
4
( 1)
n
1
n
x
n
( 1)
n
2
x
(2
n
n
1
1)!
多项式的基本运算
加法运算
求值运算
( )
f x
a
0
a
0
乘法运算
2
a x
a x
1
2
*(
*(
x a x a
2
1
n
a x
n
*(
x a
1
n
* )
x a
n
))
普通的多项式乘法运算
多项式乘法是一个很常见的问题,在通常
n
2(
)
O n
的算法中,两个 次多项式的乘法需要用
的时间才能完成。
让我们先来看一看这样的算法是如何进行的:
n
a x
n
b x
n
n
a x
1
n
x
b
1
n
n
1
n
1
...
...
a x a
1
0
b x
1
b
0
n
a b x
0
n
b x
a
1 1
n
1
n
a b x
1 0
n
...
...
2
a b x
1 1
n
ab x a b
1 0
0 0
a b x
1 0
*
a b x
1
n
n
1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
a b x
n
n
2
n
...
a b x
1
n
n
1
a b x
0
n
n
a b x
n n
2
n
......
n
k
1
a
n
1
k
b x
k
n
1
n
k
0
a
n k
n
b x
k
...
(
a b
1 0
a b x a b
0 1
0 0
)
在上面的过程中,似乎我们觉得这个算法并没有做任何多
余的事情,因为我们必须考虑每一组 ,它们的乘积对最终
的结果都会产生影响。而且我们不能通过调整计算顺序从根本
上降低算法时间复杂度,至多只能使其常数因子稍小一些。
a b
i
j
如果我们不能跳出以上思维的局限,我们就不可能在根本
上降低算法的时间复杂度。
让我们首先换一个角度来考察多项式。
多项式的点值表示法
首先让我们来看多项式的另一种表示方法:点值表示法,
(
f x
即用 (其中, 互不
i
相同)来表示一个不超过 次多项式。
),( ,
x y
1
1
),......,(
(
,
x y
0
0
),(
x y
2, 2
,
y x
i
i
)
,
x
y
1
1
n
n
1n
)
给定一个多项式,要给出n组点值对最简单的方法是任
选 n个互不相同的xi,依次求出多项式在这n个点的值。
用n个点值对也可以唯一确定一个不超过n-1次多项式,
这个过程称之为插值。
引理1(多项式插值的唯一性)
),(
,
x y
1
1
对于任意n个点值对组成的集合,
,
{(
x y
其中 互不
0
0
相同,则存在唯一的次数不超过n-1的多
1
项式 ,满足
0,1,...,
),......(
x
n
,
y
1
n
( )A x
,
x x
0
1
,...,
x
1
n
)}
n
1
y
k
(
A x
k
)
k
continue