Performance 将表达式括起来以使其值最大化的算法

Performance 将表达式括起来以使其值最大化的算法,performance,algorithm,optimization,expression,dynamic-programming,Performance,Algorithm,Optimization,Expression,Dynamic Programming,我在查找动态规划问题时发现了这一点。 您将得到一个形式为V0 O0 V1 O1…的未经计算的表达式。。。。Vn-1 我们必须把括号放在使整个表达式的值最大化的地方 V是操作数,O是运算符。 在第一个版本中,问题运算符可以是*和+,操作数为正。 问题的第二个版本是完全通用的 对于第一个版本,我提出了DP解决方案 溶液- []=操作数数组 B[]-运算符数组 T(A[i,j])-表达式的最大值 T(A[0,n-1])=所有i{(T(A[0,i])oit(A[i+1,n-1]))上的最大值 边界情况很

我在查找动态规划问题时发现了这一点。 您将得到一个形式为V0 O0 V1 O1…的未经计算的表达式。。。。Vn-1

我们必须把括号放在使整个表达式的值最大化的地方

V是操作数,O是运算符。 在第一个版本中,问题运算符可以是*和+,操作数为正。 问题的第二个版本是完全通用的

对于第一个版本,我提出了DP解决方案

溶液- []=操作数数组 B[]-运算符数组 T(A[i,j])-表达式的最大值 T(A[0,n-1])=所有i{(T(A[0,i])oit(A[i+1,n-1]))上的最大值

边界情况很简单(当i=j时)。 我需要以下方面的帮助-
分析了该算法的运行时间。如果存在更好的。

则更容易分析从较短范围到较长范围的
a[i,j]
元素的计算。其算法如下所示:

# Initialization of single values
for i in 0, ..., n-1:
  A[i,i] = V[i]

# Iterate through number of operation
for d in 1, ..., n-1:
  # Range start
  for i in 0, ..., n-1-d:
    j = i + d
    A[i,j] = max( A[i,x] O_x A[x+1,j] for x in i, ..., j-1)

print 'Result', A[0,n-1]

由于
A[]
可以通过恒定时间访问(数组)实现,因此算法是
O(n^3)

参考Thomas H.Cormen-算法简介,第章-动态规划。你在任何地方都找不到更好的解释。我认为在问题的一般版本中,我们也应该处理最小值,因为min*min的结果是max。所以我们应该保留两个动态规划数组。