1. 程式人生 > >自然語言處理之LCS最長公共子子序列

自然語言處理之LCS最長公共子子序列

else turn src 進行 字串 bubuko pri class code

#!一個序列S任意刪除若幹個字符得到的新序列T,則T叫做S的子序列

註意,這個和最長公共字串不一樣,最長公共子串要求連續。

1.算法公式:

技術分享圖片

def lcs(a,b):
    lena = len(a)
    lenb = len(b)
    c=[[0]*(lenb+1) for j in range(lena+1) ]
    flag = [[0]*(lenb+1) for j in range(lena+1) ]
    for i in range(lena+1)[1:]:
        for j in range (lenb+1)[1:]:
            if a[i-1]==b[j-1]:
                c[i][j]
=c[i-1][j-1]+1 flag[i][j]=ok elif c[i-1][j]>c[i][j-1]: c[i][j]=c[i-1][j] flag[i][j]=left else: c[i][j]=c[i][j-1] return c a=lcs("ABCDEF","DBAFCDF") print(a[-1][-1])

這裏只是返回最大長度,如果求最大子序列,還需要進行回溯。

自然語言處理之LCS最長公共子子序列