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中常用的九种预处理方法分享
Sep 11 Python
python中日志logging模块的性能及多进程详解
Jul 18 Python
Python实现SQL注入检测插件实例代码
Feb 02 Python
[机器视觉]使用python自动识别验证码详解
May 16 Python
利用python开发app实战的方法
Jul 09 Python
Python实现直方图均衡基本原理解析
Aug 08 Python
Python下应用opencv 实现人脸检测功能
Oct 24 Python
Python爬取豆瓣视频信息代码实例
Nov 16 Python
python进行参数传递的方法
May 12 Python
Python新手学习函数默认参数设置
Jun 03 Python
降低python版本的操作方法
Sep 11 Python
教你怎么用Python处理excel实现自动化办公
Apr 30 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
linux iconv方法的使用
2011/10/01 PHP
PHP 正则表达式小结
2015/02/12 PHP
php文件操作相关类实例
2015/06/18 PHP
PHP中利用sleep函数实现定时执行功能实现代码
2016/08/25 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
2017/10/26 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
JavaScript Date对象使用总结
2009/05/14 Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
js中Image对象以及对其预加载处理示例
2013/11/20 Javascript
js对文章内容进行分页示例代码
2014/03/05 Javascript
js实现楼层导航功能
2017/02/23 Javascript
Node.js 实现简单的接口服务器的实例代码
2017/05/23 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
Python中__init__.py文件的作用详解
2016/09/18 Python
Python中类的初始化特殊方法
2017/12/01 Python
python 中的list和array的不同之处及转换问题
2018/03/13 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
汽车专业毕业生推荐信
2013/11/12 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
二年级评语大全
2014/04/23 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
党的群众路线教育实践活动查摆问题及整改措施
2014/10/10 职场文书
2014年林业工作总结
2014/12/05 职场文书
贷款承诺书
2015/01/20 职场文书
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript