【变治法】霍纳法则C++代码实现,求一个多项式在一个给定点的值
来源:互联网 发布:vero moda淘宝旗舰店 编辑:程序博客网 时间:2024/05/01 01:51
一、霍纳法则算法原理
假设有n+1个实数a0,a1,…,an,和x的序列,要对多项式Pn(x)= anx ^n+a(n-1)x^(n-1)+…+a1x+a0求值。通过如下变换我们可以得到一种快捷的算法,即Pn(x)= anx ^n+a(n-1)x^(n-1)+…+a1x+a0=((…(((anx +an-1)x+an-2)x+ an-3)…)x+a1)x+a0,这种求值的安排我们称为霍纳法则。
例如,当x=3时,计算p(x)=2x^4-x^3+3x^2+x-5的值。对于多项式p(x)=2x^4-x^3+3x^2+x-5,我们按霍纳法则进行变换,有:
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
二、霍纳法则二维表格计算
①在实际的操作过程中,我们只需要一个该多项式系数的原始列表。
②该表第一行包含了该多项式的系数(如果存在等于0的系数,也都包含进来),从最高的an到最低的a0。
③第二行中除了第一个和第二个单元格用来存储x和an外,其它单元格都用来存储中间结果。
④在作了这样的初始化后,在计算第二行的某一个单元格的值时,用该单元格的前一个单元格乘以x的值再加上该单元格的第一行的系数即可。用这种方式算出的最后一个单元格的值,就是该多项式的值。
最高次数为n,那么表格列数就为n+1
三、霍纳法则代码实现
①伪代码:
Horner(P[0..n],x) //用霍纳法则求一个多项式在一个给定点的值 //输入:一个n次多项式的系数数组P[0..n](从低到高存储),以及一个数字x //输出:多项式在x点的值 p<-P[n] for i<-n-1 downto 0 do p<-x*p+p[i]return p
②霍纳法则C++实现:
#include <iostream>using namespace std;int LEN = 3;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];//递归过程 } } int main(){int a[3]={1,2,3};//数组表示多项式的系数 int x=3;//多项式的自变量值 int result=0;//存放结果 result = hornor(a,0,3); cout<<result<<' ';cout<<endl;exit(0); return 0;}
四、霍纳法则时间复杂度VS直接方法时间复杂度
①直接方法:对每一项分别求值,并把每一项求的值累加起来,这种方法十分低效,它需要进行n+(n-1)+…+1=n(n+1)/2次乘法运算和n次加法运算。
②而霍纳法则只需要n次乘法与n次加法
阅读全文
0 0
- 【变治法】霍纳法则C++代码实现,求一个多项式在一个给定点的值
- 用霍纳法则(Honer)求一个多项式在定点的值
- 数据结构_写程序计算给定多项式在给定点处的值
- 计算给定多项式 在给定点 x = 1.1 处的值 f(1.1)
- 霍纳法则{计算多项式的值}
- 霍纳法则--计算多项式的值
- 判断一个点是否在给定的凸四边形内
- 二分法求多项式的一个根
- 给定一个值,求组合该值的组合集合
- 求给定一个正整数的二进制表示
- object-c实现获取一个图片像素点RGB值的代码
- unity给定两个点和中间点的其中一个坐标比如z坐标,求该点的坐标
- C语言实现一个多项式操作
- 一个“点赞”功能的实现代码
- 2-10 霍纳法则(秦九韶算法)--求多项式
- 给定一个 ArrayList<Integer>的一个对象,实现在这个集合中添加一个字符串
- 给定一个数组和一个数M,在数组中求一些数使它们的和最接近M------用递归法实现的。。。。。。
- C判断一个数是2的次方、求给定数的最近的2的次方值
- 怎样提高关键词排名,有什么技巧
- NSSortDescriptor作用
- Java(Eclipse)报出异常java.net.MalformedURLException: no protoco的l解决方法
- HTML部分基础总结(6)
- 中夜之思
- 【变治法】霍纳法则C++代码实现,求一个多项式在一个给定点的值
- 三周五次课(11月3日) 1.生成式和生成器 2.迭代器 3.装饰器
- 工厂模式
- 大数据集群之CDH版本搭建完整版
- 浅谈Java中的equals和==
- java:jsonp前后端实例演示
- java 设计模式之单例模式
- bzoj 4034(树链剖分)
- 5G:非正交多址接入(NOMA)与串行干扰删除(SIC)