python实现最长公共子序列


Posted in Python onMay 22, 2018

最长公共子序列python实现,最长公共子序列是动态规划基本题目,下面按照动态规划基本步骤解出来。

1.找出最优解的性质,并刻划其结构特征

序列a共有m个元素,序列b共有n个元素,如果a[m-1]==b[n-1],那么a[:m]和b[:n]的最长公共子序列长度就是a[:m-1]和b[:n-1]的最长公共子序列长度+1;如果a[m-1]!=b[n-1],那么a[:m]和b[:n]的最长公共子序列长度就是MAX(a[:m-1]和b[:n]的最长公共子序列长度,a[:m]和b[:n-1]的最长公共子序列长度)。

2.递归定义最优值

python实现最长公共子序列

3.以自底向上大方式计算出最优值

python代码如下:

def lcs(a,b): 
  lena=len(a) 
  lenb=len(b) 
  c=[[0 for i in range(lenb+1)] for j in range(lena+1)] 
  flag=[[0 for i in range(lenb+1)] for j in range(lena+1)] 
  for i in range(lena): 
    for j in range(lenb): 
      if a[i]==b[j]: 
        c[i+1][j+1]=c[i][j]+1 
        flag[i+1][j+1]='ok' 
      elif c[i+1][j]>c[i][j+1]: 
        c[i+1][j+1]=c[i+1][j] 
        flag[i+1][j+1]='left' 
      else: 
        c[i+1][j+1]=c[i][j+1] 
        flag[i+1][j+1]='up' 
  return c,flag 
 
def printLcs(flag,a,i,j): 
  if i==0 or j==0: 
    return 
  if flag[i][j]=='ok': 
    printLcs(flag,a,i-1,j-1) 
    print(a[i-1],end='') 
  elif flag[i][j]=='left': 
    printLcs(flag,a,i,j-1) 
  else: 
    printLcs(flag,a,i-1,j) 
     
a='ABCBDAB' 
b='BDCABA' 
c,flag=lcs(a,b) 
for i in c: 
  print(i) 
print('') 
for j in flag: 
  print(j) 
print('') 
printLcs(flag,a,len(a),len(b)) 
print('')

python实现最长公共子序列

运行结果输出如下:

python实现最长公共子序列

4.根据计算最优值得到的信息,构造最优解

上图是运行结果,第一个矩阵是计算公共子序列长度的,可以看到最长是4;第二个矩阵是构造这个最优解用的;最后输出一个最优解BCBA。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python list中append()与extend()用法分享
Mar 24 Python
Python中使用摄像头实现简单的延时摄影技术
Mar 27 Python
常见的在Python中实现单例模式的三种方法
Apr 08 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
Oct 11 Python
python对视频画框标记后保存的方法
Dec 07 Python
详解pyppeteer(python版puppeteer)基本使用
Jun 12 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
Jun 28 Python
python中tkinter的应用:修改字体的实例讲解
Jul 17 Python
Python学习工具jupyter notebook安装及用法解析
Oct 23 Python
Python3+Flask安装使用教程详解
Feb 16 Python
PyQt QMainWindow的使用示例
Mar 24 Python
使用Python的开发框架Brownie部署以太坊智能合约
May 28 Python
使用python存储网页上的图片实例
May 22 #Python
python3模块smtplib实现发送邮件功能
May 22 #Python
Python3.x爬虫下载网页图片的实例讲解
May 22 #Python
python3使用smtplib实现发送邮件功能
May 22 #Python
python抓取网站的图片并下载到本地的方法
May 22 #Python
Python3实现的字典、列表和json对象互转功能示例
May 22 #Python
python3.5 email实现发送邮件功能
May 22 #Python
You might like
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
PHP中list方法用法示例
2016/12/01 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
javascript事件函数中获得事件源的两种不错方法
2014/03/17 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
跟我学习javascript的prototype使用注意事项
2015/11/17 Javascript
使用jQuery制作Web页面遮罩层插件的实例教程
2016/05/26 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
jQuery Plupload上传插件的使用
2017/04/19 jQuery
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
vue elementui tree 任意级别拖拽功能代码
2020/08/31 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
Python中的错误和异常处理简单操作示例【try-except用法】
2017/07/25 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
2017/12/21 Python
python 按不同维度求和,最值,均值的实例
2018/06/28 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
Python闭包思想与用法浅析
2018/12/27 Python
python如何实现视频转代码视频
2019/06/17 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
司机的工作范围及职责
2013/11/13 职场文书
竞选部门副经理的自荐书范文
2014/02/11 职场文书
文明市民先进事迹
2014/05/15 职场文书
运动会演讲稿50字
2014/08/25 职场文书
地陪导游欢迎词
2015/01/26 职场文书
Pycharm连接远程服务器并远程调试的全过程
2021/06/24 Python