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多进程编程下线程之间变量的共享问题
May 05 Python
Python的Tornado框架实现图片上传及图片大小修改功能
Jun 30 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
May 27 Python
python交易记录整合交易类详解
Jul 03 Python
Python3 列表,数组,矩阵的相互转换的方法示例
Aug 05 Python
python 微信好友特征数据分析及可视化
Jan 07 Python
python离线安装外部依赖包的实现
Feb 13 Python
python virtualenv虚拟环境配置与使用教程详解
Jul 13 Python
Python collections.deque双边队列原理详解
Oct 05 Python
详解Python 3.10 中的新功能和变化
Apr 28 Python
python not运算符的实例用法
Jun 30 Python
python编程学习使用管道Pipe编写优化代码
Nov 20 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 xml文件操作代码(一)
2009/03/20 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
Vue Socket.io源码解读
2018/02/07 Javascript
解决Mac node版本升级失败的问题
2018/05/16 Javascript
jQuery实现获取及设置CSS样式操作详解
2018/09/05 jQuery
Vue文件配置全局变量的实例
2018/09/06 Javascript
nodejs中各种加密算法的实现详解
2019/07/11 NodeJs
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
Python下使用Psyco模块优化运行速度
2015/04/05 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
pandas求两个表格不相交的集合方法
2018/12/08 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
对Python3中列表乘以某一个数的示例详解
2019/07/20 Python
快速解决vue.js 模板和jinja 模板冲突的问题
2019/07/26 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
python中的django是做什么的
2020/07/31 Python
让IE6支持css3,让 IE7、IE8 都支持CSS3
2011/10/09 HTML / CSS
StubHub希腊:购买体育赛事、音乐会和剧院门票
2019/08/03 全球购物
New delete 与malloc free 的联系与区别
2013/02/04 面试题
初一家长会邀请函
2014/01/31 职场文书
大二学习计划书范文
2014/04/27 职场文书
竞聘上岗演讲稿
2014/05/16 职场文书
工地门卫岗位职责范本
2014/07/01 职场文书
党员示范岗材料
2014/12/19 职场文书
入党自荐书范文
2015/03/05 职场文书
工地食品安全责任书
2015/05/09 职场文书
大学班长竞选稿
2015/11/20 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
基于JavaScript实现省市联动效果
2021/06/22 Javascript