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 03 Python
python实现FTP服务器服务的方法
Apr 11 Python
Python学习笔记之解析json的方法分析
Apr 21 Python
Python File readlines() 使用方法
Mar 19 Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
PyTorch基本数据类型(一)
May 22 Python
Python3和PyCharm安装与环境配置【图文教程】
Feb 14 Python
Pytorch .pth权重文件的使用解析
Feb 14 Python
Django用户认证系统如何实现自定义
Nov 12 Python
python爬取微博评论的实例讲解
Jan 15 Python
python实现经典排序算法的示例代码
Feb 07 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+Memcache实现wordpress访问总数统计(非插件)
2014/07/04 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
php检测图片主要颜色的方法
2015/07/01 PHP
laravel学习教程之存取器
2016/07/30 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
浏览器常用高宽的jquery插件
2011/02/24 Javascript
jquery导航制件jquery鼠标经过变色效果示例
2013/12/05 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
JavaScript Array对象扩展indexOf()方法
2014/05/09 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
jQuery中contents()方法用法实例
2015/01/08 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
javascript 正则表达式分组、断言详解
2017/04/20 Javascript
值得收藏的八个常用的js正则表达式
2018/10/19 Javascript
vue-cli3 从搭建到优化的详细步骤
2019/01/20 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
2019/12/17 Javascript
学习python之编写简单乘法口诀表实现代码
2016/02/27 Python
django框架使用方法详解
2019/07/18 Python
Python3分析处理声音数据的例子
2019/08/27 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
2019/10/30 Python
python 遍历pd.Series的index和value
2019/11/26 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
简历自荐信
2013/12/02 职场文书
商业计算机应用专业自荐书
2014/06/09 职场文书
国庆宣传标语
2014/06/30 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
2014年企业员工工作总结
2014/12/09 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
火烧圆明园观后感
2015/06/03 职场文书
胡桃夹子观后感
2015/06/11 职场文书
入党转正申请书范文
2019/05/20 职场文书
团组织关系介绍信
2019/06/24 职场文书
python_tkinter事件类型详情
2022/03/20 Python
JavaScript获取URL参数的方法分享
2022/04/07 Javascript