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)) 

関数リターン

[]

その問題はインデックスにあると思いますが、どこにあるのかわかりません。

4

1 に答える 1