霍纳规则中的算法思想

在《算法导论》第二章的思考题中,描述了利用霍纳规则计算多项式的方法。以前自己在写程序的时候都是傻傻的简单粗暴地直接上了,看到这个算法的时候眼前一亮,就多看了一些,果然要比直接计算要效率高很多。为了防止自己以后忘了这个高效的算法,在此记录一下。

简介

据百度百科介绍,霍纳规则用来简化朴素多项式的求值,在中国叫秦九韶算法。霍纳规则是一种将一元n次多项式的求值问题转化为n个一次式的算法。其大大简化了计算过程,即使在现代,利用计算机解决多项式的求值问题时,霍纳规则依然是最优的算法规则

直接迭代计算多项式

既然是最优的算法规则,我们可以根据它的计算过程来分析为何它会简化原来的计算过程。一般多项式的表达式如下:

P(n)=∑k=0nakxk=a0+x(a1+x(a2+...+x(an−1+xan)))

P(n)=\sum_{k=0}^{n}a_kx^k=a_0+x(a_1+x(a_2+...+x(a_{n-1}+xa_n)))
最简单直接的计算方法就是直接迭代计算相加,其伪代码如下:

sum=0
for k<---0 to nsum<---sum+ak*x^k

对于每个k,假设计算机的计算幂的时候是采用元素多次相乘,则sum+akxksum+a_kx^k的计算复杂度为k+2k+2(假设加法和乘法指令的时间一样,下同),总的计算时间为

T(n)=c1n+c2(2+3+...+(n+2))=c1n+c2n(n+4)2

T(n)=c_1n+c_2(2+3+...+(n+2))=c_1n+c_2\frac{n(n+4)}{2}
即直接计算的时间复杂度为 θ(n2)θ(n^2)。

霍纳规则计算多项式

霍纳规则采用的是最少乘法策略,它通过巧妙的结构分解,避免了一次次计算幂的过程,简化了乘法计算数目,大大提高了计算效率。再次看一下多项式进行结构分解后的形式:

P(n)=∑k=0nakxk=a0+x(a1+x(a2+...+x(an−1+xan)))

P(n)=\sum_{k=0}^{n}a_kx^k=a_0+x(a_1+x(a_2+...+x(a_{n-1}+xa_n)))
霍纳规则的伪代码如下:

y<---0
for k<---n to 0do y<---ak+x*y

此时,对于每个k,其计算的时间复杂度为2,则霍纳规则计算多项式的总时间为:

T(n)=c1n+c2×2×n=(c1+2c2)n

T(n)=c_1n+c_2\times2\times{n}=(c_1+2c_2)n
即霍纳规则计算多项式的时间复杂度为 θ(n)θ(n)。

显然,θ(n)θ(n)要远远优于θ(n2)θ(n^2)。虽然这只是一个小小的例子,但足以体现出算法思想的力量,以后再写程序决不能蒙着脑袋上去就写了,还真是要好好琢磨一下呢。

祝枫
2016年7月10日于深圳

算法学习三:使用霍纳规则计算多项式相关推荐

  1. java规则计算_java实现的霍纳规则的多项式计算

    java实现的霍纳规则的多项式计算 霍纳规则多项式计算如果使用朴素的多项式求值,时间复杂度为O(n*n),而是用了霍纳规则可以使用递归或者迭代来实现,时间复杂度是O(n),下面是源代码: /* * 实 ...

  2. java实现的霍纳规则的多项式计算

    霍纳规则多项式计算如果使用朴素的多项式求值,时间复杂度为O(n*n),而是用了霍纳规则可以使用递归或者迭代来实现,时间复杂度是O(n),下面是源代码: /* * 实现霍纳规则的多项式计算时间复杂度为O ...

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

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

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

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

  5. 霍纳规则(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 ...

  6. 算法学习笔记:对指定金额计算最少钞票数

    算法学习笔记:对指定金额计算最少钞票数 一.引出问题 财务人员给员工发工资时经常遇到这样一个问题,即根据每个人的工资额(以元作为单位)计算出各种面值的钞票的张数,且要求总张数最少.例如,某职工工资为3 ...

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

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

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

    一.背景 霍纳(Horner)规则是采用最少的乘法运算策略,来求多项式 A(x)=anxn+an−1xn−1+...+a1x+a0 A(x) = a_n x^n + a_{n-1}x^{n-1} + ...

  9. 霍纳(Horner)规则的两种实现方法

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

最新文章

  1. javascript之温习闭包
  2. 软件项目管理0724:见供应商的体会
  3. [java]常用类型转化
  4. window,linux python2,python3共存
  5. win7锁屏时间怎么设置_电脑锁屏时间怎么设置
  6. 艰苦的网购火车票,周末可以不用再秒杀余票了
  7. TFBOYS网易云音乐演唱会破纪录 同时在线人数超78万
  8. mysql skip remarks_mysql DatabaseMetaData 获取table remarks为空的解决办法
  9. JDBC驱动连接SQLserver数据库
  10. 从零开始编译LEDE固件 默认中文material主题_php_sir_新浪博客
  11. win10您的计算机配置文件,Win10系统开机登录提示无法加载用户配置文件如何解决...
  12. 爬取招聘信息并进行数据分析及可视化
  13. 基于Nonebot2搭建QQ机器人实战篇(一)
  14. Codeforces Round #460 (Div. 2) C Seat Arrangements
  15. C# 拼图游戏(超详细)
  16. android蓝牙hid 鼠标,BLE HID协议-----蓝牙鼠标代码流分析
  17. POJ3349-Snowflake Snow Snowflakes
  18. wps在线预览接口_金山文档在线编辑 - 快速接入 - 《WPS开放平台技术文档》 - 书栈网 · BookStack...
  19. 网络变压器中心抽头电容的作用
  20. oracle常用函数number,Oracle 常用函数介绍

热门文章

  1. 最长k可重区间集问题最长k可重线段集问题
  2. jsp内置对象*session
  3. uva 12730(期望经典)
  4. 经典算法题每日演练——第二十四题 梳排序
  5. SELinux系列(七)——SELinux安全上下文的修改和设置(chcon和restorecon命令)
  6. 中gcd函数_函数和模块的使用
  7. data-mask遮罩无法正常显示与编辑的问题
  8. 为什么html中li浮动,相对定位下的绝对定位下的li为什么不能浮动??
  9. 单因素方差分析graphpad_【SPSS】单因素方差分析(比较均值gt;单因素ANOVA)
  10. 音乐计算机官方.,Boom音乐电脑版