【算法】-000 一维多项式求值

【算法】-000 一维多项式求值

1、一维多项式的定义

  一维多项式是指如下所示的一元多项式:

p(x)=an1xn1+an2xn2+an3xn3++a2x2+a1x+a0 p ( x ) = a n − 1 x n − 1 + a n − 2 x n − 2 + a n − 3 x n − 3 + ⋯ + a 2 x 2 + a 1 x + a 0

  一维多项式的求值就是求 p(x) p ( x ) x x 处的值。

2、普通解法

  普通解法是按照常规做法,一项一项的求值,分别计算xn1,在计算 an1 a n − 1 xn1 x n − 1 的乘积,并将最后的结果相加,得到计算结果。

  这种做法需要的计算量如下:

  计算 x2 x 2 需要1次乘法, x3 x 3 需要两次乘法, x4 x 4 需要3次乘法,再加上前面与系数的乘法,一共需要进行

N=1+2+3+4++(n2)+(n1)=n(n1)2 N = 1 + 2 + 3 + 4 + ⋯ + ( n − 2 ) + ( n − 1 ) = n ( n − 1 ) 2
次乘法,因此,其时间复杂度为 O(n2) O ( n 2 ) ,空间复杂度可以做到 O(1) O ( 1 )

3、变形解法

  将一维多项式变形成

p(x)=(((an1x+an2)x+an3)x++a1)x+a0 p ( x ) = ( ( … ( a n − 1 x + a n − 2 ) x + a n − 3 ) x + ⋯ + a 1 ) x + a 0

  可以看出,这一解法的乘法计算量并未减少,算法的时间复杂度仍然为 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 结果保存下来,在下次求解更高次幂的时候可以使用。

  此时,计算 xn1 x n − 1 需要的乘法次数为 n2 n − 2 次,各项与其系数相乘共需进行 n2 n − 2 次乘法,因此,一共的乘法次数为 2n2 2 n − 2 次,所以时间复杂度为 O(n) O ( n ) 。但算法执行过程中需要使用空间对 xn1 x n − 1 的计算过程进行存储,共需存储 n2 n − 2 个计算结果,因此,空间复杂度为 O(n) O ( n )

  由此可见,虽然算法的时间复杂度降低了,但同时其空间复杂度上升了,时间和空间需要进行平衡。需要根据算法的使用场景来选择算法。

5、多项式稀疏时的情况

  这里的多项式稀疏是指一维多项式中,指数不连续,通常指指数值很大,但项数很少,例如

p(x)=a100000x100000+a3x3+a2x2+a1x1+a0 p ( x ) = a 100000 x 100000 + a 3 x 3 + a 2 x 2 + a 1 x 1 + a 0

  可以看出,直接计算时,乘法次数为100000+3+2+1次,额外空间为1。但使用时间换空间算法时,乘法次数为100000+1+1,额外空间为100000。算法并未明显改善时间复杂度同时浪费了空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值