首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >加法与乘法对算法性能的影响

加法与乘法对算法性能的影响
EN

Software Engineering用户
提问于 2013-02-19 09:45:29
回答 1查看 363关注 0票数 3

我正在研究如何优化算法。(Skiena教授的算法指南)

其中一个练习要求我们优化一个算法:

代码语言:javascript
运行
复制
Suppose the following algorithm is used to evaluate the polynomial
p(x) = a^(xn) + a^n−1(xn−1) + . . . + a(x) + a
p := a0;
xpower := 1;
for i := 1 to n do
xpower := x ∗ xpower;
p := p + ai ∗ xpower
end

(这里xn,xn-1.是指定给不同常量的名称。

在对此进行了思考之后,我发现改进该算法的唯一方法如下

代码语言:javascript
运行
复制
p := a0;
xpower := 1;
for i := 1 to n do
  xpower := x ∗ xpower;
     for j := 1 to ai
         p := p + xpower
     next j
next i
end

有了这个解决方案,我把第二个乘法转换成一个for循环中的加法。

我的问题:

  1. 你有没有其他方法来优化这个算法?
  2. 我建议的替代方案是否比原来的更好?(编辑:正如评论中所建议的,这个问题虽然与问题有关,但也值得提出另一个问题。(请忽略。)
EN

回答 1

Software Engineering用户

回答已采纳

发布于 2013-02-19 10:18:28

标准的解决方案是注意到,一个有许多乘法与相同的数字x。

所以而不是

代码语言:javascript
运行
复制
p(x) = a_n*x^n + a_n−1*x^n−1 + . . . + a_1*x + a_0

有人可能会写

代码语言:javascript
运行
复制
p(x) = (...((a_n*x) + a_n−1)x + ... + a_1)*x + a_0

也许更容易读懂:

代码语言:javascript
运行
复制
p(x) := a_3*x^3 + a_2*x^2 + a_1*x + a_0
q(x) := ((a_3*x + a_2)*x + a_1)*x + a_0
p(x) == q(x)

我们称之为这样的评价霍纳法。大致翻译为:

代码语言:javascript
运行
复制
p := a_n;
for i is n-1 to 0
   p := p*x + a_i

Horner的方法有n个乘法和n个加法,并且是最优的。

票数 7
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/187536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档