自然語言處理之LCS最長公共子子序列
阿新 • • 發佈:2019-01-30
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最長公共子子序列