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 19 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 Python
Python实现的计算器功能示例
Apr 26 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
django之状态保持-使用redis存储session的例子
Jul 28 Python
python实现递归查找某个路径下所有文件中的中文字符
Aug 31 Python
Python Collatz序列实现过程解析
Oct 12 Python
python在不同条件下的输入与输出
Feb 13 Python
Flask和pyecharts实现动态数据可视化
Feb 26 Python
解决django中form表单设置action后无法回到原页面的问题
Mar 13 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 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 REMOTE_ADDR之获取访客IP的代码
2008/04/22 PHP
PHP中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
php7性能提升的原因详解
2019/10/13 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
2020/03/18 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
理解Javascript_08_函数对象
2010/10/15 Javascript
jQuery 表单验证扩展(四)
2010/10/20 Javascript
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
AngularJs Managing Service Dependencies详解
2016/09/02 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
js 事件的传播机制(实例讲解)
2017/07/20 Javascript
详解基于vue的服务端渲染框架NUXT
2018/06/20 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
解决layer 动态加载select 失效的问题
2019/09/18 Javascript
vue-cli 为项目设置别名的方法
2019/10/15 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
JavaScript编写开发动态时钟
2020/07/29 Javascript
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
python实现宿舍管理系统
2019/11/22 Python
Pytorch 实现数据集自定义读取
2020/01/18 Python
python datetime处理时间小结
2020/04/16 Python
HTML5 预加载让页面得以快速呈现
2013/08/13 HTML / CSS
Java如何支持I18N?
2016/10/31 面试题
什么是岗位职责
2013/11/12 职场文书
《夜晚的实验》教学反思
2014/02/19 职场文书
党员公开承诺践诺书
2014/03/25 职场文书
农村党员一句话承诺
2014/05/30 职场文书
文秘自荐信
2014/06/28 职场文书
ktv好的活动方案
2014/08/15 职场文书
2016年“11.11”光棍节活动总结
2016/04/05 职场文书