秦九韶算法计算多项式

方法1:直接模拟累加。
题目条件:n为最高的次数,a数组为系数,x为给定的值。

double f(int n,double a[],double x)
{
    int i;
    double p=a[0];
    for(i=1;i<=n;i++)
        p+=(a[i]*pow(x,i));
    return p;
}

方法二:根据秦九韶算法:
在这里插入图片描述
可转化为:
在这里插入图片描述
故我们可以从内往外递推的计算多项式的值。

double f(int n,double a[],double x)
{
    int i;
    double p=a[n];//从最内层开始
    for(i=n;i>0;i--)
        p=a[i-1]+p*x;
    return p;
}

两种算法时间复杂度分析:
第一种由于的时间复杂度大致为O(N)=n²。若将pow函数改为快速幂函数,则可优化为O(N)=n(logn);
第二种的时间复杂度为O(N)=n;

你可能感兴趣的:(算法,算法,c语言)