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实现简单温度转换的方法
Mar 13 Python
python字典get()方法用法分析
Apr 17 Python
使用Python的Flask框架来搭建第一个Web应用程序
Jun 04 Python
简述:我为什么选择Python而不是Matlab和R语言
Nov 14 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
Jun 18 Python
在vscode中配置python环境过程解析
Sep 28 Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 Python
Python turtle画图库&&画姓名实例
Jan 19 Python
pandas 强制类型转换 df.astype实例
Apr 09 Python
Python实现扫码工具的示例代码
Oct 09 Python
理解python中装饰器的作用
Jul 21 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
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
php实现简单的上传进度条
2015/11/17 PHP
JavaScript 读取元素的CSS信息的代码
2010/02/07 Javascript
基于jquery的分页控件(C#)
2011/01/06 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
2015/03/04 Javascript
继续学习javascript闭包
2015/12/03 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
javascript、php关键字搜索函数的使用方法
2018/05/29 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
磁盘垃圾文件清理器python代码实现
2020/08/24 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
Python实现获取本地及远程图片大小的方法示例
2018/07/21 Python
python 动态生成变量名以及动态获取变量的变量名方法
2019/01/20 Python
使用Python制作表情包实现换脸功能
2019/07/19 Python
Python全面分析系统的时域特性和频率域特性
2020/02/26 Python
Python爬虫获取页面所有URL链接过程详解
2020/06/04 Python
python基于opencv实现人脸识别
2021/01/04 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
C语言50道问题
2014/10/23 面试题
草船借箭教学反思
2014/02/03 职场文书
《穷人》教学反思
2014/04/08 职场文书
学习十八大的心得体会
2014/09/01 职场文书
2014年后勤工作总结
2014/11/18 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏