优化算术表达式计算的算法

时间:2013-09-04 00:16:11

标签: algorithm optimization expression

假设我有一个由整数变量和算术运算形成的表达式:加法,减法和乘法。我知道每次乘法需要M秒,每次加法/减法需要A秒。是否有一种算法能够以最有效的方式计算表达式,以便对变量进行任意赋值? (假设我只能在内存中存储一​​个号码)。

示例:

M = 10

A = 1

表达式:a * a + a * b + b * b。

最初,它有3次乘法和2次加法,因此总时间为3 * M + 2 * A = 32

但是,我们可以构建一个等价表达式(a + b)*(a + b)-a * b,它只有2次乘法和3次加法,所以总计算时间为2 * M + 3 * A = 23。

2 个答案:

答案 0 :(得分:1)

您想要应用和积算法。

请参阅:

http://www.isiweb.ee.ethz.ch/papers/docu/aloe-2001-1.pdf

答案 1 :(得分:1)

你基本上想减少乘法次数。一种方法如下(我不知道由此产生的成本降低是否应证明算法的复杂性和成本):

  1. 根据运算符优先级允许添加的所有操作数上的Perfom添加。

  2. 形成必须经过乘法的操作数对。

  3. 在这些对中,取出共同的操作数并将它们的对应物加在一起。

  4. 更新对并转到第3步。

  5. 当没有留下这样的公共对时停止。然后只做剩余的计算。

    例: a * b + a * c + d *(e + f) 在e& amp; f(比如g = e + f) a * b + a * c + d * g 对:(a,b)(a,c)(d,g) a在前两对中很常见,所以我们添加b&角