《算法导论》第2章霍纳规则

本文介绍了一种高效计算多项式的算法——霍纳规则,并提供了两种实现方式:迭代和递归。通过实例演示了如何使用该算法减少计算次数。

霍纳规则用于计算以下多项式的值,并使乘法的次数最少:

                

现在给定a0, a1, ... ,an的值以及x的值,计算P(x)。

  使用霍纳规则计算多项式:
double polynomial(vector <double> a, double x)
{
double y=0;
for(int i=a.size()-1;i>=0;i--) y=a[i]+x*y;
return y;
}
 #include <stdio.h>  
 #include <stdlib.h>  
//计算:a[0]+a[1]*x+a[2]*x^2=a[0]+x(a[1]+x*a[2])
 double polynomial(int* a, double x,int n);  
 int main()  
 {  
     int a[3]={1,2,3};//数组表示多项式的系数  
    int x=2;//多项式的自变量值  
     int result=0;//存放结果  
     result = polynomial(a,2,3);  
     printf("%d\n",result);  
     return 0; 
 }  
   
 double polynomial(int a[], double x,int n)
{
double y=0;
for(int i=n-1;i>=0;i--) y=a[i]+x*y;
return y;
}
递归版本:


 #include <stdio.h>  
 #include <stdlib.h>  
//计算:a[0]+a[1]*x+a[2]*x^2=a[0]+x(a[1]+x*a[2])
  #define LEN 3  
 int hornor(int [],int,int);  
 int main()  
 {  
     int a[3]={1,2,3};//数组表示多项式的系数  
    int x=2;//多项式的自变量值  
     int result=0;//存放结果  
     result = hornor(a,0,2);  
     printf("%d\n",result);  
     exit(0);  
 }  
   
 int hornor(int list[],int n,int x)  
 //利用递归实现霍纳规则  
 {  
     if(n == LEN-1)  
     {  
         return list[LEN-1];//递归出口  
     }  
     else  
     {                                                                                                          
        return hornor(list,n+1,x)*x+list[n];//递归过程  
     }  
 }  

运行结果17


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值