【发布时间】:2013-09-04 00:16:11
【问题描述】:
假设我有一个由整数变量和算术运算组成的表达式:加法、减法和乘法。我知道每次乘法需要 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.
【问题讨论】:
-
我们在计算解时是否必须考虑每个 M 和 A? ;)
-
是的,每次乘法成本为M,每次加法成本。你不能重复使用你得到的结果。 (假设您正在使用反向波兰符号并逐步计算每个 + 或 *)。
-
我不确定您是否理解我的问题——例如,在您的示例中,您将总计算时间描述为
2*M+3*A=23。我在问在计算2*M+3*A=23的解决方案时使用的 M 和 A 怎么样。也许需要另外 3*M 和 15*A 来计算 23 的解。在这种情况下,总数将是 23+45... -
不,我们不需要考虑 time(23) 计算,假设我们有一个计时器来测量它。 23 是我们需要使用等价形式 (a+b)*(a+ b)-ab。我想知道是否有一种算法(可以是任意复杂的)来提出一个等价的形式,这将导致最快的计算。
标签: algorithm optimization expression