多项式求值的秦九韶算法

多项式求值算法,如果仅用普通的多项式的求法,对于n次多项式,需要n/(n+1)次的乘法,n次加法,计算量大,改用秦九韶算法,能有效的降低时间复杂度,并且该算法还能顺便给出多项式在该点的导数值,一举多得。秦九韶算法在国外又称Hernor算法。

下面贴代码:

/*
*多项式求值的秦九韶算符(国外称Hernor算法)
*该算符将一个多项式求值,原本进行n(n+1)/2次乘法,和n次加法运算
*简化成n次乘法运算和n次加法运算。
*并能给出该点的导数值
*接口说明:返回值是double类型。
*double* a :输入的多项式的系数数组,序列为最高阶项到常数项。既a[0]代表n次项的系数
*double x:待求值
*const int n:多项式的阶数,n阶多项式为n。
*/


#include<iostream>

double Hernor(double* a,double x,const int n)
{
    double* b = new double[n + 1];
    b[0] = a[0];
    int i = 1;
    while (i <= n)
    {
        b[i] = b[i - 1] * x + a[i];
            i++;
    }

    double y = b[n];
    delete[] b;
    return y;
}



double Hernor_D(double* a, double x, const int n)
{
    double* b = new double[n + 1];
    b[0] = a[0];
    int i = 1;
    while (i <= n)
    {
        b[i] = b[i - 1] * x + a[i];
        i++;
    }

    double* c = new double[n];
    i = 1;
    while (i < n)
    {
        c[0] = b[0];
        c[i] = c[i - 1] * x + b[i];
        i++;
    }

    double y = c[n - 1];
    delete[] b;
    delete[] c;
    return y;
}


/*
int main()
{
    double a[6] = { 3.0,0,-2.0,0,1.0,7.0 };
    int x = 3;
    double value;
    value = Hernor(a, x, 5);
    std::cout << "该多项式在x=-2处的值为 " << value <<std::endl;
    value = Hernor_D(a, x, 5);
    std::cout << "该多项式在x=-2处的导数值为 " << value << std::endl;
    return 0;
}

*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值