这是前一段时间问我的一个面试问题:

我能够在动态规划的方向上思考并将其与 matrix chain multiplication problem 联系起来,但一直坚持推导出这个关系的确切递归关系。
此外,后续问题只会让我的情况复杂化:

关于如何处理和构建解决方案的解释会很棒。

最佳答案

我认为与矩阵乘法算法的相同关系将起作用。

我们试图计算的函数是

F(i,j) = maximum number that can be computed using Xi ... Xj

基本情况是当我们有一个数字时:
F(i,i) = Xi

递归情况是用于括号中的两个子表达式之间的操作:
F(i,j) = for k = i,j-1, maximize
    F(i,k) Yk F(k+1, j)

我认为贪婪地最大化数字应该有效,因为对于正数的乘法和加法,我们希望两个操作数都尽可能大。

如果我们允许除法,那么我们将希望第二个操作数尽可能小以最大化结果。在这种情况下,您不仅需要计算 F ,还需要计算一个类似的 G 来最小化区间内的值。

如果我们允许减法,那么我们将需要考虑正数和负数d。如果您跟踪最大正数、最小正数、最大负数和最小负数,我认为您应该能够获得所需的任何值。也许有一种替代方法需要较少的计算。

我并没有停下来思考 % 的含义。首先,它如何处理 / 的非整数结果?

关于algorithm - 动态规划 : maximize value of arithmetic expression using parenthesis,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24744491/

10-11 18:32