如何使用python实现最长公共子序列

  介绍

这篇文章主要介绍如何使用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。递归定义最优值

如何使用python实现最长公共子序列“> <br/> </p> <p> 3。以自底向上大方式计算出最优值</p> <p> python代码如下:<br/> </p> <pre类= 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实现最长公共子序列

运行结果输出如下:

如何使用python实现最长公共子序列“> <br/> </p> <p> 4。根据计算最优值得到的信息,构造最优解</p> <p>上图是运行结果,第一个矩阵是计算公共子序列长度的,可以看到最长是4,第二个矩阵是构造这个最优解用的,最后输出一个最优解BCBA。</p> <p class=以上是“如何使用python实现最长公共子序列”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

如何使用python实现最长公共子序列