【算法】-000 一维多项式求值
1、一维多项式的定义
一维多项式是指如下所示的一元多项式:
一维多项式的求值就是求 p(x) p ( x ) 在 x x 处的值。
2、普通解法
普通解法是按照常规做法,一项一项的求值,分别计算,在计算 an−1 a n − 1 与 xn−1 x n − 1 的乘积,并将最后的结果相加,得到计算结果。
这种做法需要的计算量如下:
计算 x2 x 2 需要1次乘法, x3 x 3 需要两次乘法, x4 x 4 需要3次乘法,再加上前面与系数的乘法,一共需要进行
3、变形解法
将一维多项式变形成
可以看出,这一解法的乘法计算量并未减少,算法的时间复杂度仍然为 O(n2) O ( n 2 ) ,空间复杂度为 O(1) O ( 1 ) 。
4、空间换时间
对于一维多项式,过程中需要多次求解 xk x k ,并且在 xk+1=xk×x x k + 1 = x k × x ,因此,可以在计算过程中将 xk x k 结果保存下来,在下次求解更高次幂的时候可以使用。
此时,计算 xn−1 x n − 1 需要的乘法次数为 n−2 n − 2 次,各项与其系数相乘共需进行 n−2 n − 2 次乘法,因此,一共的乘法次数为 2n−2 2 n − 2 次,所以时间复杂度为 O(n) O ( n ) 。但算法执行过程中需要使用空间对 xn−1 x n − 1 的计算过程进行存储,共需存储 n−2 n − 2 个计算结果,因此,空间复杂度为 O(n) O ( n ) 。
由此可见,虽然算法的时间复杂度降低了,但同时其空间复杂度上升了,时间和空间需要进行平衡。需要根据算法的使用场景来选择算法。
5、多项式稀疏时的情况
这里的多项式稀疏是指一维多项式中,指数不连续,通常指指数值很大,但项数很少,例如
可以看出,直接计算时,乘法次数为100000+3+2+1次,额外空间为1。但使用时间换空间算法时,乘法次数为100000+1+1,额外空间为100000。算法并未明显改善时间复杂度同时浪费了空间。