有人能告诉我为什么这段代码不能产生每个递增的子序列吗?我使用动态规划来解决,但我无法弄清楚为什么这段代码失败了。参数
A
是一个整数序列。def LIS(A):
# make a list of lists
L = list()
for i in range(0, len(A)):
L.append(list())
#the first increasing subsequence is the first element in A
L[0].append(A[0])
for i in range(1, len(A)):
for j in (0, i):
# a new larger increasing subsequence found
if (A[j] < A[i]) and ( len(L[i]) < len(L[j]) ):
L[i] = L[j]
L[i].append(A[i])
# print an increasing subsequence
print L[i]
这个算法对于A = [3, 5, 10, 0, 1, 100, 2, 4, 7] 的示例输出结果如下:
[3, 5]
[3, 5, 10]
[0]
[1]
[3, 5, 10, 100]
[2]
[3, 5, 10, 100, 4]
[3, 5, 10, 100, 4, 7]
None
正确的输出:
[3]
[3, 5]
[3, 5, 10]
[0]
[0, 1]
[3, 5, 10, 100]
[0, 1, 2]
[0, 1, 2, 4]
[0, 1, 2, 4, 7]
[0, 1, 100]
不是有效的? - wwiiA
的第一个项目与A[i]
或A[i]
与其自身进行比较 -for j in (0, i):
中迭代的不应该是(0,1)
。我没有看到任何使用动态规划的证据。 - wwiipprint.pprint(L)
作为最后一个语句,在外部循环停止之后。 - wwii