我是Python的新手,所以如果这是一个非常愚蠢的问题,我会事先道歉。差不多,我正在编写一个动态编程最常见的子序列算法
每当我尝试运行它时,我得到IndexError: list index out of range
,我不知道为什么因为我正在添加值的数组永远不会改变大小。为清晰起见,代码段:
def LCS(sequence1, sequence2):
n = len(sequence1)
m = len(sequence2)
D = [[0 for num in range(0,n)]for number in range(0, m)]
for i in range(1, n):
for j in range(1, m):
if(sequence1[i] == sequence2[j]):
D[i][j] = D[i-1][j-1] + 1
else:
D[i][j] = max(D[i-1][j], D[i][j-1])
print D[n][m]
答案 0 :(得分:1)
似乎有两个问题:
在memPointer += actualSize;
printf("&mem_arr[0] = %p, memPointer = %p\n", &mem_arr[0], memPointer);
的定义中,您应该交换D
和n
m
您必须打印(或更好地:返回)矩阵的最后一个元素
D = [[0 for num in range(0, m)] for number in range(0, n)]
答案 1 :(得分:0)
问题在于矩阵(D)的总行数和列数。大小应为(m+1)*(n+1)
,然后循环遍历矩阵。否则你需要返回D [m-1] [n-1]。
def LCS(sequence1, sequence2):
n = len(sequence1)
m = len(sequence2)
D = [[0 for num in range(0,n+1)]for number in range(0, m+1)]
for i in range(1, n+1):
for j in range(1, m+1):
if(sequence1[i-1] == sequence2[j-1]):
D[i][j] = D[i-1][j-1] + 1
else:
D[i][j] = max(D[i-1][j], D[i][j-1])
print D[n][m]
LCS('abcdef' , 'defjkl')