霍纳规则解决多项式的求值问题

霍纳规则用来简化朴素多项式的求值。它将一元n次多项式的求值问题转化为n个一次式。

霍纳规则是采用最少的乘法运算策略,求多项式A(x) = anxn+ an-1xn-1+...+ a1x + a0在x0处的值,该规则是A(x0)=(...((anx0+ an-1)x0+...+ a1)x0+ a0)

 1 #include<stdio.h>
 2
 3 int horner(int a[], int x, int n);
 4
 5 int main()
 6 {
 7     int n;
 8     scanf("%d", &n);
 9
10     int a[n + 1];
11     int x;
12     for(int i = 0; i <= n; i++){
13         scanf("%d", &a[i]);
14     }
15
16     scanf("%d", &x);
17     printf("%d", horner(a, x, n));
18
19     return 0;
20 }
21
22 int horner(int a[], int x, int n)
23 {
24     int i = n;
25     int result = x;
26     while(i > 0){
27         result = a[i] + result * x;
28         i--;
29     }
30
31     return result;
32 }

原文地址:https://www.cnblogs.com/legoxz/p/8525134.html

时间: 2024-11-05 12:32:44

霍纳规则解决多项式的求值问题的相关文章

第一章 基本概念_利用霍纳规则求多项式的值(递归)

#include <stdio.h>  #include <stdlib.h>  #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);  //3*2^2+2*2^2+1*2^0              

多项式多点求值和插值

本文以存板子为主= = 对于比较一般的情况,n次多项式在n个点求值和用n个点插值可以做到,并且这也是下界. 多项式多点求值 给一个多项式F和一堆值,求出. 设,. 那么对于,,对于,.递归即可. 多项式多点插值 给一堆值.,要求求出一个n-1次多项式满足. 考虑拉格朗日插值:. 我们先考虑对于每个i,如何求出.设,那么我们就是要求. 取的时候这个式子分子分母都为0,那么我们可以用洛必达法则,这个式子就等于.那么我们可以用多点求值求出每个. 设为,现在我们就是要求,显然可以分治FFT. 具体地,还

霍纳规则(C/C++,Scheme)

一.背景 霍纳(Horner)规则是采用最少的乘法运算策略,来求多项式 A(x)=anxn+an?1xn?1+...+a1x+a0 在x0处的值. 该规则为 A(x0)=(...((anx0+an?1)x0+...+a1)x0+a0) 二.分析 如果光看着式子或许会有点烦躁,不妨手动设定几个值到式子中去来手工运算一番,这样一来也会有些亲身的理解. 通过分解我们注意到,从右往左来看,每一个小式子都是如此: something?x0+ai 三.代码 C语言版 #include <stdio.h>

多项式多点求值

给定一个\(n\)次多项式\(A(x)\)和\(m\)个值\(a_i\),求出对于\(任意i\in [0,m-1],A(a_i)\)的值 前置知识: 分治FFT 多项式除法 一般优化多项式要么倍增要么分治-- 然而这题看上去不像能倍增的亚子,所以就分治吧 考虑先将要求的点分为两部分 \(x[0]=\{x_0,x_1,--,x_{\frac{m}{2}}\},x[1]=\{x_{\frac{m}{2}+1},x_{\frac{m}{2}+2},--x_{m-1}\}\) 我们记\(p[0]=\pr

基于数值分析思想对多项式求值的原理和应用进行探究

摘要:多项式是由多个单项(符号项如:5x或者常数项4)通过四则运算组合起来的式子,如P(x)=2x^4+3x^3-3x^2+5x-1 一般的求解会将特定的x代入到上式中,一个一个的计算,共需要花费10次的乘法和4次加法运算,但是我们可以通过霍纳方法对多项式进行组合计算,在需要每秒对多个不同输入的x多次计算多项式对应的值时,该方法可以极大的提高计算效率. 原理:采用霍纳方法对上式进行分解步骤如下: P(x) = -1+x(5-3x+3x^2+2x^3) = -1+x(5+x(-3+3x+2x^2)

霍纳法则

计算机科学中,有一些关于多项式求值的问题.对于多项式求值问题,我们最容易想到的算法是求出每一项的值然后把所求的值累加起来,这种算法的时间和空间效率都不高,对于数据规模不大的题目来说由于其直观.简单很容易被大家采纳,可一旦数据规模过大时,这种算法就显得无能为力了,下面介绍一种解决这类求值问题的高效算法――霍纳法则.在中国,霍纳法则也被称为秦九韶算法. 霍纳法则最重要的用途:为多项式求值提供了一个高效的方法.算式转化如下: 实例如下: 使用霍纳法则,步骤如下: 1,建立二维表格,将公式的系数填入第一

多项式求值

一.一维多项式求值: P(x)=3x^6+7x^5+3x^4+3x^3+8x^2+5x+23 一个通用的计算多项式的值的算法可以采用递推的方式.首先可以将上面多项式变形为如下的等价方式: P(x)=(...((an-1x+an-2)x+an-3)x+...+a1)x+a0 通过以上表达式可以看出,只要从里往外逐层按照如下的方式递推,便可以计算得到一个一维多项式的值: Rk=Rk+1*x+ak 具体示例代码如下: 1 /* 2 * @author 3 * 一维多项式求值,从最高一项开始迭代计算 4

用Objective-C的foundation框架解决表达式求值问题

主要思想: 本程序分2个类 一个是ExpressionString类,主要用于存储表达式以及对它进行求值.以下是该类中的内容: (NSString *)expString//用于存储要计算的表达式: -(NSString*)caculateExpression//就用于计算该表达式的值. 另外一个类是ExpressionEvaluation,此类用于辅助ExpressionString类来对表达式进行求值.以下是该类中的内容: -(id) init; //初始化函数-(BOOL) isDigit

算法笔记02--归纳法之多项式求职(Horner规则)

多项式求值 假设有n+2个实数a0,a1,...,an和x的序列,求多项式 p_nx = a_nx^n + a_n-1x^n-1 + ...+ a_1x + a_0; 则需要乘法:n+n-1 + ...+2+1 = n(n+1)/2 需要加法:n 可见算法效率为O(n^2) 而p_nx = ((...((((a_n)x + a_n-1)x + a_n-2)x + a_n-3)....)x + a_1x) + a_0 因此思路: p_0x = a_n p_1x = xp_0x + a_n-1 p_