假设有n+1个实数 a0,a1,…,an ,和x的序列,要对多项式Pn(x)= anxn +an-1xn-1+…+a1x+a0 求值,直接方法是对每一项分别求值,并把每一项求的值累加起来,这种方法十分低效,时间复杂度O(nk)。
有没有更高效的算法呢?答案是肯定的。通过如下变换我们可以得到一种快得多的算法,即
Pn(x)= anxn +an-1xn-1+…+a1x+a0=((…(((anx +an-1)x+an-2)x+ an-3)…)x+a1)x+a0
这种求值的方法我们称为霍纳法则
比如
Pn(x) = 2x4 -x3 - 3x2 + x - 5
Pn(x) = x(2x3 -x2 - 3x+ 1) - 5
Pn(x) = x(x(2x2 -x - 3)+ 1) - 5
Pn(x) = x(x(x(2x -1) - 3)+ 1) - 5
这样时间复杂度就变成O(n)了。

    function horner(a,x) {let length = a.length;//获取最高阶的系数let temp  = a[0];for (let i = 1; i < length; i++) {temp = x * temp + a[i];}return temp}function stupid(a,x){let length = a.length;let temp = 0;for (let i = 0; i < length; i++) {temp += a[i] * Math.pow(x,length-1-i);}return temp}let a = [1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2,1,4,2];let x = 3;let start =  Date.now();for (let i = 0; i <1000000; i++) {horner(a,x);}console.log("horner time = ",(Date.now() - start));start =  Date.now();for (let i = 0; i <1000000; i++) {stupid(a,x);}console.log("stupid time = ",(Date.now() - start));

两个计算结果有着巨大的差异

霍纳法则(Horner Rule)--计算多项式的值相关推荐

  1. 多项式求解(霍纳规则(Horner Rule))

    1.霍纳规则(Horner Rule) 霍纳规则是采用最少的乘法运算策略,求多项式在x处的值,该规则为.利用该规则,可以求任意多项式的在x处的值. 2.实现代码 int horner(int *a, ...

  2. 霍纳法则及C语言实现

    1.霍纳法则介绍 a. 求多项式值的一个快速算法 b. 假设有n+2个数,a0,a1,- an和x的组成的一个多项式,形式如下: ,通常都是一项一项的求和然后累加,这样的话要进行次乘法运算和n次加法运 ...

  3. 霍纳法则(Horner‘s rule)

    文章目录 霍纳法则(Horner's rule) 程序设计 程序分析 霍纳法则(Horner's rule) [问题描述] 用霍纳法则求一个多项式在一个给定点的值 [输入形式]输入三行,第一行是一个整 ...

  4. 霍纳法则——计算多项式的值

    例:,计算x=7时p(x)的值. 平时计算我们都会想到直接将x=代入方程中直接求解.但是这样子的话计算量很大,效率不高.而使用霍纳法则,则可以提高计算的效率. 一.霍纳法则的步骤 1.首先建立一个二维 ...

  5. 霍纳法则--计算多项式的值

    先来个实例: 计算x=7时p(x)的值. 解法1:我们想到的就是直接将x=7代入方程,然后算出结果:4314.(效率不高) 解法2: 使用霍纳法则: 步骤: 1.建立二维表格,将公式的系数填入第一行( ...

  6. 利用从左到右二进制幂算法计算二进制的幂(霍纳法则升级版,变治法)

    文章目录 题目描述 一.二进制幂的计算 二.题解 1.源代码 2.源程序测试 写在最后 题目描述 7.a.应用从左到右二进制幂算法来计算 a 17 a^{17} a17 本题目来源:<算法设计与 ...

  7. 霍纳规则(Horner'ruler)算法

    多项式:A(x) = a[n]*x^n + a[n-1]*x^(n-1)+...+ a[1]*x^1 + a[0],直接计算时,效率并不高 Horner'ruler规则:A(x) = (...(((a ...

  8. 1.5 编程基础之循环控制 36 计算多项式的值 python

    http://noi.openjudge.cn/ch0105/36/ """ 1.5 编程基础之循环控制 36 计算多项式的值 http://noi.openjudge. ...

  9. 信息学奥赛一本通 1012:计算多项式的值 | OpenJudge NOI 1.3 07

    [题目链接] ybt 1012:计算多项式的值 OpenJudge NOI 1.3 07:计算多项式的值 [题目考点] 1. 计算表达式书写 了解*的运算优先级比+高. 了解()可以改变运算优先级 2 ...

  10. 信息学奥赛一本通(1093:计算多项式的值)

    1093:计算多项式的值 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 36753     通过数: 16786 [题目描述] 假定多项式的形式为xn+xn−1+ ...

最新文章

  1. linux 下检查硬盘坏道/扇区
  2. 如何判断车与路边线距离_6家快递公司共享分拣线配送车,效果如何?
  3. qt 启动画面显示图片_Qt程序起动画面QSplashScreen
  4. Python语言编程之正则表达式模式
  5. asp调用打开exe文件
  6. SpringBoot集成OpenOffice实现doc文档转html
  7. 什么是WebService??
  8. JAVA类(手机充电、放音乐示例)
  9. tomcat部署多个项目,通过域名解析访问,不同的网站
  10. 激活anaconda的环境出现source: no such file or directory: activate
  11. BZOJ3209(luogu 4317)花神的数论题题解
  12. 认识JQuery的三天--看视频得到的一些小知识点
  13. 解决办法:error: unknown type name ‘__int64‘
  14. 基于Python3爬取百度百科内容(可自己输入关键字)
  15. python 占位符 %z_python-如何用z替换熊猫数据框中的负数
  16. pe系统如何读取手机_在酷安你甚至可以学到如何用手机充当启动盘进PE(多图警告)...
  17. 鸿蒙跟海思是什么,华为到底还有多少麒麟9000?又一款旗舰曝光,出场即是鸿蒙...
  18. RASNet视频目标跟踪论文笔记
  19. homelede软路由设置方法_低成本组装一台LEDE软路由
  20. 徒留标点暧昧不明的微笑-转自www.97w.com

热门文章

  1. 文件访问被拒绝XXX 你需要权限才能执行此操作你需要计算机管理员提供的权限才能对此文件进行更改
  2. 环球企业家:web2.0创业时代将终结
  3. 2006(首届)Web2.0十大创新品牌
  4. 是非人生 — 一个菜鸟程序员的5年职场路 第24节
  5. 奇迹服务器 修改升级点数,奇迹SF如何修改升级点数和经验倍数
  6. 多变量微积分笔记(2)——多元函数及其微分
  7. python面向对象编程实例:烤地瓜
  8. 新建一个html代码页面,三分钟教你创建一个简单的网页
  9. 三进制与八进制相互转换
  10. not discrete but [0, 1]. Specify a discrete sample time in