霍纳法则
霍纳法则是一个古老的计算多项式的算法
例如计算如下多项式
p(x)=2x^4-x^3-3x^2+x-5
=x(2x^3-x^2-3x+1)-5
=x(x(2x^2-x-3)+1)-5
=x(x(x(2x-1)-3)+1)-5
依次由里面向外面逐渐计算,每次乘以x在加上外围参数即可
python代码如下
def huona(List,x):
Sum=0
for i in range(len(List)):
Sum=x*Sum+List[i]
return Sum
if __name__=='__main__':
List=[2,-1,-3,1,-5]#外面的参数
print(huona(List,x=2))
在求解x^n时,蛮力法求解了n-1次,霍纳法则也是求解了n-1次,不过霍纳法则顺便把其他x^n-1,x^n-1....x也求解出来了,而蛮力法只是求解了x^n这一项.
二进制幂
下面来求解a^13
13的二进制表示形式1101
扫描二维码关注公众号,回复:
4927102 查看本文章
a^13=(((a^2)*a)^2)^2*a
其形式可以表示为:
n的二进制位(ni) | 1 | 1 | 0 | 1 |
累乘器(sum) | a | a^2*a | (a^2*a)^2 | ((a^2*a)^2)^2*a |
不难看当,可以有如下代码
sum=1
if ni==1:
sum=sum**2*a
if ni==0:
sum=sum**2
故得到计算a^13的从左到右的二进制幂的算法
python代码如下
def huona2(List,a):
Sum=1
for i in range(len(List)):
Sum*=Sum
if List[i]==1:
Sum*=a
return Sum
if __name__=='__main__':
List=[1,1,0,1]#13的二进制幂
print(huona2(List,a=3))#求3^13次方