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中dictionary items()系列函数的用法实例
Aug 21 Python
Python写的创建文件夹自定义函数mkdir()
Aug 25 Python
pandas对指定列进行填充的方法
Apr 11 Python
python用win32gui遍历窗口并设置窗口位置的方法
Jul 26 Python
在django admin中添加自定义视图的例子
Jul 26 Python
Django实现简单网页弹出警告代码
Nov 15 Python
python 读取更新中的log 或其它文本方式
Dec 24 Python
pytorch 模型的train模式与eval模式实例
Feb 20 Python
Django操作session 的方法
Mar 09 Python
python如何支持并发方法详解
Jul 25 Python
Python数据清洗工具之Numpy的基本操作
Apr 22 Python
总结Pyinstaller打包的高级用法
Jun 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+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
深入PHP运行环境配置的详解
2013/06/04 PHP
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
PHP实现QQ登录的开原理和实现过程
2018/02/04 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
技术男用来对妹子表白的百度首页
2014/07/23 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
Google 地图控件集详解及实例代码
2016/08/06 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
js实现图片上传即时显示效果
2019/09/30 Javascript
Python2.x利用commands模块执行Linux shell命令
2016/03/11 Python
python 二分查找和快速排序实例详解
2017/10/13 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
python在线编译器的简单原理及简单实现代码
2018/02/02 Python
删除python pandas.DataFrame 的多重index实例
2018/06/08 Python
Sanic框架蓝图用法实例分析
2018/07/17 Python
python分批定量读取文件内容,输出到不同文件中的方法
2018/12/08 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
python时间time模块处理大全
2020/10/25 Python
python 使用tkinter+you-get实现视频下载器
2020/11/17 Python
美国运动鞋和运动服零售商:Footaction
2017/04/07 全球购物
高中毕业自我鉴定
2013/12/22 职场文书
教师职位说明书
2014/07/29 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
学生保证书
2015/01/16 职场文书
医院中层管理人员培训心得体会
2016/01/11 职场文书
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
2022/05/25 SQL Server