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 dict remove数组删除(del,pop)
Mar 24 Python
python实现井字棋游戏
Mar 30 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
python使用turtle库绘制树
Jun 25 Python
Python 找到列表中满足某些条件的元素方法
Jun 26 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
python 发送json数据操作实例分析
Oct 15 Python
Python如何使用turtle库绘制图形
Feb 26 Python
Django模板获取field的verbose_name实例
May 19 Python
Python内置方法和属性应用:反射和单例(推荐)
Jun 19 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
Python爬虫制作翻译程序的示例代码
Feb 22 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
十大催泪虐心动漫,你能坚持看到第几部?
2020/03/04 日漫
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
php简单判断文本编码的方法
2015/07/30 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
2016/07/21 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
PDO::inTransaction讲解
2019/01/28 PHP
Javascript里使用Dom操作Xml
2007/01/22 Javascript
jquery自动完成插件(autocomplete)应用之PHP版
2009/12/15 Javascript
Jquery 获得服务器控件值的方法小结
2010/05/11 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
js 原生判断内容区域是否滚动到底部的实例代码
2017/11/15 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
python搜索包的路径的实现方法
2019/07/19 Python
tensorflow如何批量读取图片
2019/08/29 Python
美国老牌主机服务商:iPage
2016/07/22 全球购物
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
奥林匹亚体育:Olympia Sports
2020/12/30 全球购物
初中生学习生活的自我评价
2013/11/20 职场文书
党章学习思想汇报
2014/01/14 职场文书
教师节商场活动方案
2014/02/13 职场文书
双创工作实施方案
2014/03/26 职场文书
民族精神月活动总结
2014/08/28 职场文书
中班上学期个人总结
2015/02/12 职场文书
工作岗位职责范本
2015/02/15 职场文书
和领导吃饭祝酒词
2015/08/11 职场文书
企业版Windows 11有哪些新功能? Win11适用于企业的功能介绍
2021/11/21 数码科技
解决flex布局中子项目尺寸不受flex-shrink限制
2022/05/11 HTML / CSS