0
我有2個序列,需要找到最長的公共子序列。不知道爲什麼我的功能恢復不起作用。最長的公共子序列(還原序列)
#sequenses
A=[1,2,3]
B=[2,3,1,5]
#table AxB
rows=[0]*(len(B)+1)
table=[rows for l in range(len(A)+1)]
for i in range(len(A)):
for k in range(len(B)):
if A[i]==B[k]:
table[i+1][k+1]=table[i][k]+1
else:
table[i+1][k+1]=max(table[i][k+1], table[i+1][k])
print(table)
lst=[]#subsequence
#function to restore subsequence by walking through table
def restore(s1,s2):#s1=len(A)-1, s2=len(B)-1
if s1==-1 or s2==-1:
pass
elif A[s1]==B[s2]:
print (1)
lst.append(A[s1])
restore(s1-1, s2-1)
else:
if table[s1][s2+1]==table[s1+1][s2+1]:
restore(s1-1,s2)
else:
restore(s1, s2-1)
return lst
如果我做
print (restore(2,3))
函數返回
[]
我認爲,這個問題是索引,但無法找到它在哪裏。
謝謝!我的表錯了。現在所有的腳本都正常工作 –