最大化算术表达式

时间:2016-06-08 19:53:05

标签: algorithm expression dynamic-programming

我想最大化表达式5-8+7*4-8+9 分割后,答案为200 (5 − ((8 + 7) × (4 − (8 + 9))))

可以使用Matrix-chain multiplication算法解决。 如果表达式只有'+'和'*'运算符

,它会给出正确的答案
 Let's take expression 5+2*4
     1 2 3
   1 5 7 28
   2 - 2 8
   3 - - 4

这是一个3X3矩阵,其中(1,1)是5,(2,2)是2,(3,3)是4 如果我想知道M [1] [2]或M [1] [3]那么

  

M [1] [2] = M [1] [1] o M [2] [2]

     

M [1] [3] = max(M [1] [1] o M [2] [3],M [1] [2] o M [3] [3])

有人可以帮我找到' - '运算符的正确方法。

1 个答案:

答案 0 :(得分:0)

不确定是否可以使用您的算法解决,但这是我将如何解决它。

假设你必须简化一些表达式:a # b # c # d # e,其中#是某些操作(#可以是不同的)。我会用递归(和memoization)来处理它。在递归的第一步,我将尝试在每个可能的位置插入括号,并在此表达式后计算表达式:

  • (a # b) # c # d # e = X # c # d # e
  • a # (b # c) # d # e = a # Y # d # e
  • a # b # (c # d) # e = a # b # Z # e
  • a # b # c # (d # e) = a # b # c # V

所以你基本上只将5个运算符表达式减少为一堆4个运算符表达式。如果2表达式相同,则记忆将有所帮助。当只有一个数字时(在这种情况下,您将其与最大值和更新最大值进行比较),您可以完成递归。

请注意,对于5个运算符表达式,您甚至不需要记忆。