python - 通过放置括号来最大化表达式的动态规划解决方案

标签 python dynamic-programming parentheses

我正在尝试实现来自 Algorithmic Toolbox course on Coursera 的算法它接受一个算术表达式,例如 5+8*4-2 并计算它的最大可能值。但是,我并不真正理解所示算法最后一部分中索引的选择;我的实现无法使用 2 个表(用于存储子表达式的最大化和最小值)中初始化的值来计算值。

evalt 函数只是获取 char,将其转换为操作数并计算两位数字的乘积:

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)

这是main函数的主体

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/

相关文章:

python - django教程: unexpected indent error

python - FormName 没有属性 'error_messages'

algorithm - 背包的变化 - 具有精确重量的最低总成本

c - 如何设计金盒游戏的策略和算法

c++ - 变量后的两个括号?

powershell - 在 PowerShell 脚本中使用括号?

python - 将字符串拆分为连续的计数?

python - 在 Linux 中通过 python 自动安装 tripwire

java - 关于用两个矩形包围点的算法题

vim - 如何在 Vim 中的括号(或引号或...)之间进行选择?