这篇文章主要介绍如何使用python实现最长公共子序列,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
1。找出最优解的性质,并刻划其结构特征
序列一个共有m个元素,序列b共有n个元素,如果(m - 1)==b (n - 1),那么a [m]和[:n]的最长公共子序列长度就是一个[m - 1)和b (n - 1)的最长公共子序列长度+ 1,如果[m - 1] !=b (n - 1),那么a [m]和[:n]的最长公共子序列长度就是马克斯(a [: m - 1]和[:n]的最长公共子序列长度,a [m]和[:n - 1]的最长公共子序列长度).
2。递归定义最优值
def lcs (a, b):, 莉娜才能=len (a), lenb才能=len (b), c=才能[[0,for 小姐:拷贝范围(lenb + 1)), for j 拷贝范围(lena + 1)), 国旗才能=[[0,for 小姐:拷贝范围(lenb + 1)), for j 拷贝范围(lena + 1)), for 才能小姐:范围(丽娜):拷贝, ,,,for j 范围(lenb):拷贝, ,,,,,if [我]==b [j]:, ,,,,,,,c [i + 1] c [j + 1]=[我][j] + 1, ,,,,,,,国旗(i + 1) [j + 1]=& # 39;好吧,, ,,,,,elif c (i + 1) [j]在c[我][j + 1]:, ,,,,,,,c [i + 1] c [j + 1]=[i + 1] [j], ,,,,,,,国旗(i + 1) [j + 1]=& # 39;左# 39;, ,,,,,:, ,,,,,,,c [i + 1] c [j + 1]=[我][j + 1), ,,,,,,,国旗(i + 1) [j + 1]=& # 39;了,, return 才能;c, flag , def printLcs(国旗,,i, j):, if 才能;我==0,趁机j==0:, ,,,return if 才能;旗帜[我][j]==& # 39;好# 39;:, ,,,printLcs(张旗帜,j - 1), ,,,print((张),结束=& # 39;& # 39;), elif 才能;旗帜[我][j]==& # 39;左# 39;:, ,,,printLcs(国旗,,i, j - 1), ,,: ,,,printLcs(张旗帜,j), ,,,,=& # 39;ABCBDAB& # 39;, b=& # 39; BDCABA& # 39;, c,国旗=lcs (a, b), for 小姐:c:拷贝, 打印(i),才能 打印(& # 39;& # 39;), for j 国旗:拷贝, 打印(j),才能 打印(& # 39;& # 39;), printLcs(国旗,len (a), len (b)), 打印(& # 39;& # 39;)
运行结果输出如下:
以上是“如何使用python实现最长公共子序列”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!