python霍纳法则和二进制幂

霍纳法则

霍纳法则是一个古老的计算多项式的算法

例如计算如下多项式

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次方

猜你喜欢

转载自blog.csdn.net/qq_42402381/article/details/86490424