我正在我的教科书(Ex 4.7)中练习,并在Python中实现代码以练习动态编程。我在执行算法4.8时遇到了一些麻烦。我了解到发生了什么,直到我从s
到1
到t-1
的范围,并将s
设置为最小化f(s)
。为什么这本书在for循环中使用s
并将其设置为功能f(s)
?如何在Python中实现这一行?
[当前代码位于底部]
到目前为止,我当前的代码是
x = [1,2,5,6,10]
k = 3
n = 5
r = [[0 for x in range(k)] for x in range(n)]
c = [[0 for x in range(k)] for x in range(n)]
def Union(lst1, lst2):
final_list = lst1 + lst2
return final_list
for j in range(k):
for t in range(n):
if j == 0:
r[t][j] = (x[t]-x[0])/2
c[t][j] = [(x[t]+x[0])/2]
else:
for s in range(t-1):
f = max(r[s][j-1], (x[t]-x[s+1])/2)
#set s to minimize f??
r[t][j] = f
w = []
w.append((x[t]+x[s+1])/2)
if c[s][j-1] == 0:
c[t][j] = w
else:
c[t][j] = Union(c[s][j - 1], w)
print(r)
print(c)
非常感谢您的帮助!
答案 0 :(得分:1)
算法非常好。我的代码如下。
=
建议: 当您不了解算法时,可以手动在草稿纸上运行它,也许您会发现它是如何工作的。