我正在尝试从 Algorithmic Toolbox course on Coursera 实现一种算法,该算法采用算术表达式(例如 5+8*4-2)并计算其最大可能值。但是,我并不真正理解所示算法的最后一部分中索引的选择;我的实现无法使用在 2 个表中初始化的值(用于存储子表达式的最大化和最小化值)来计算值。
evalt 函数只接受字符,将其转换为操作数并计算两位数的乘积:
def evalt(a, b, op):
if op == '+':
return a + b
#and so on
MinMax 计算子表达式的最小值和最大值
def MinMax(i, j, op, m, M):
mmin = 10000
mmax = -10000
for k in range(i, j-1):
a = evalt(M[i][k], M[k+1][j], op[k])
b = evalt(M[i][k], m[k+1][j], op[k])
c = evalt(m[i][k], M[k+1][j], op[k])
d = evalt(m[i][k], m[k+1][j], op[k])
mmin = min(mmin, a, b, c, d)
mmax = max(mmax, a, b, c, d)
return(mmin, mmax)
这是主要功能的主体
def get_maximum_value(dataset):
op = dataset[1:len(dataset):2]
d = dataset[0:len(dataset)+1:2]
n = len(d)
#iniitializing matrices/tables
m = [[0 for i in range(n)] for j in range(n)] #minimized values
M = [[0 for i in range(n)] for j in range(n)] #maximized values
for i in range(n):
m[i][i] = int(d[i]) #so that the tables will look like
M[i][i] = int(d[i]) #[[i, 0, 0...], [0, i, 0...], [0, 0, i,...]]
for s in range(n): #here's where I get confused
for i in range(n-s):
j = i + s
m[i][j], M[i][j] = MinMax(i,j,op,m,M)
return M[0][n-1]
最佳答案
抱歉打扰了,以下是需要改进的地方:
for s in range(1,n)
在主函数中,和
for k in range(i, j):
在 MinMax 函数中。现在它起作用了。
关于python - 通过放置括号来最大化表达式的动态编程解决方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37101475/