def optimal_bstkeys p n = lenkeys c = 0 for _ in rangen for _ in rangen w = 0 for _ in rangen for _ in rangen for i in rangen cii = wii = pi for l in range2 n + 1 for i in
在这个代码中,问题可能出在以下几个地方:
-
输入的参数不符合要求,比如keys和p的长度不一致。
-
在计算c和w数组的时候,下标超出了数组的范围。
针对第一个问题,我们可以检查一下输入的keys和p的长度是否一致。
针对第二个问题,我们需要注意循环中下标的取值范围是否符合要求,特别是在计算c和w数组时的下标。
以下是修改后的代码:
def optimal_bst(keys, p): n = len(keys) c = [[0 for _ in range(n)] for _ in range(n)] w = [[0 for _ in range(n)] for _ in range(n)]
for i in range(n):
c[i][i] = w[i][i] = p[i]
for l in range(2, n + 1):
for i in range(n - l + 1):
j = i + l - 1
w[i][j] = w[i][j - 1] + p[j]
c[i][j] = float('inf')
for k in range(i, j + 1):
if k == i:
t = c[k + 1][j] + w[i][j]
elif k == j:
t = c[i][k - 1] + w[i][j]
else:
t = c[i][k - 1] + c[k + 1][j] + w[i][j]
if t < c[i][j]:
c[i][j] = t
return c[0][n - 1]
if name == 'main': keys = [1, 2, 3, 4, 5] p = [0.1, 0.2, 0.3, 0.1, 0.3] print(optimal_bst(keys, p)
原文地址: https://www.cveoy.top/t/topic/feB3 著作权归作者所有。请勿转载和采集!