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 04 Python
Python对文件操作知识汇总
May 15 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
Jun 14 Python
python 接口_从协议到抽象基类详解
Aug 24 Python
pandas 快速处理 date_time 日期格式方法
Nov 12 Python
Python基于Tkinter模块实现的弹球小游戏
Dec 27 Python
Python获取Redis所有Key以及内容的方法
Feb 19 Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 Python
Python如何在DataFrame增加数值
Feb 14 Python
python多项式拟合之np.polyfit 和 np.polyld详解
Feb 18 Python
python如何从键盘获取输入实例
Jun 18 Python
Python实现8种常用抽样方法
Jun 27 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原创论坛
2006/10/09 PHP
简单的php 验证图片生成函数
2009/05/21 PHP
PHP 文章中的远程图片采集到本地的代码
2009/07/30 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
2014/10/30 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
jQuery表单验证插件formValidator(改进版)
2012/02/03 Javascript
javascript的原生方法获取数组中的最大(最小)值
2012/12/19 Javascript
JavaScript获取和设置CheckBox状态的简单方法
2013/07/05 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
对JavaScript中this指针的新理解分享
2015/01/31 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
jQuery File Upload文件上传插件使用详解
2016/12/06 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
微信小程序中button组件的边框设置的实例详解
2017/09/27 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
js实现橱窗展示效果
2020/01/11 Javascript
js实现盒子移动动画效果
2020/08/09 Javascript
用yum安装MySQLdb模块的步骤方法
2016/12/15 Python
python实现爬山算法的思路详解
2019/04/09 Python
python安装requests库的实例代码
2019/06/25 Python
对Django中内置的User模型实例详解
2019/08/16 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
html5 canvas绘制矩形和圆形的实例代码
2016/06/16 HTML / CSS
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
大学毕业生的自我鉴定
2013/11/30 职场文书
农村党建工作汇报材料
2014/10/27 职场文书
整改落实自查报告
2014/11/05 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
战友聚会致辞
2015/07/28 职场文书
《小小的船》教学反思
2016/02/18 职场文书