Python数字线群集练习

时间:2019-03-09 02:43:55

标签: python algorithm cluster-analysis dynamic-programming

我正在我的教科书(Ex 4.7)中练习,并在Python中实现代码以练习动态编程。我在执行算法4.8时遇到了一些麻烦。我了解到发生了什么,直到我从s1t-1的范围,并将s设置为最小化f(s)。为什么这本书在for循环中使用s并将其设置为功能f(s)?如何在Python中实现这一行?

[当前代码位于底部]

enter image description here

enter image description here

enter image description here

到目前为止,我当前的代码是

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)

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

算法非常好。我的代码如下。

=

建议: 当您不了解算法时,可以手动在草稿纸上运行它,也许您会发现它是如何工作的。