我正在尝试实现Coursera 上的算法工具箱课程中的算法,该算法采用算术表达式(例如 5+8*4-2)并计算其最大可能值。但是,我不太理解所示算法最后部分中索引的选择;我的实现无法使用两个表中初始化的值(用于存储子表达式的最大化和最小化值)来计算值。
evalt 函数只接受 char,将其转换为操作数并计算两位数字的乘积:
def evalt(a, b, op):
if op == '+':
return a + b
#and so on
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
这是主函数的主体
def get_maximum_value(dataset): …Run Code Online (Sandbox Code Playgroud) 我是算法的新手,我很困惑我的代码中的错误在哪里,我正在编写作为一个赋值.我正在尝试在Python 3中实现一个快速排序算法,该算法处理数组中的相等值.
这是一个quicksort函数(代表数组):
def randomized_quick_sort(a, l, r):
if l >= r:
return
k = random.randint(l, r)
a[l], a[k] = a[k], a[l]
m1, m2 = partition3(a, l, r)
randomized_quick_sort(a, l, m1 - 1);
randomized_quick_sort(a, m2 + 1, r);
Run Code Online (Sandbox Code Playgroud)
这是我的分区功能:
def partition3(a, l, r):
x, j, t = a[l], l, r
for i in range(l + 1, r + 1):
if a[i] < x:
j +=1
a[i], a[j] = a[j], a[i]
elif a[i] > x:
a[i], a[t] = a[t], a[i]
t -=1 …Run Code Online (Sandbox Code Playgroud)