码迷,mamicode.com
首页 > 编程语言 > 详细

自然语言处理之LCS最长公共子子序列

时间:2019-01-30 15:48:47      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:alt   分享   color   for   img   最长公共子串   bcd   公式   print   

#!一个序列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最长公共子子序列

标签:alt   分享   color   for   img   最长公共子串   bcd   公式   print   

原文地址:https://www.cnblogs.com/students/p/10335438.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!