horner算法描述:
P(x) 是一个多项式:
我们希望计算x取某个特殊值x0时多项式的值p(x0).
构造一个序列:
b1 = a1 + b2X
b0 = a0 + b1X
所以最终的求和转换成求出 b0的值,递归的源头是bn
horner算法主要在于将多次乘法运算分解成为加法运算,通过;对于计算机而言,加法运算总是比乘法来的容易。
变式前的运算次数
(1)加法 :n次
(2)乘法 0 + 1 +2 + 3 + ...+n = n(n+1)/2
horner算法:
(1)加法 :n次
(2)乘法 : n次
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <iostream>
using namespace std;
int DoHorner(int szValue[], int n, const int X)
{
int sum = szValue[--n];
while(n != 0)
{
sum = szValue[--n] + sum * X;
}
return sum;
}
int main(int argc, char *argv[])
{
int szTmp[10] = {1,5,7,8,2,6,11,45,34,9};
int iSum = DoHorner(szTmp, 10, 2);
printf("iSum=[%d] \n", iSum);
int szTmp1[2] = {1,5};
iSum = DoHorner(szTmp1, 2, 2);
printf("iSum=[%d] \n", iSum);
return 0;
}