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交换变量
Sep 06 Python
Python的加密模块md5、sha、crypt使用实例
Sep 28 Python
基于Django模板中的数字自增(详解)
Sep 05 Python
python3学习笔记之多进程分布式小例子
Feb 13 Python
python 获取键盘输入,同时有超时的功能示例
Nov 13 Python
用Python实现大文本文件切割的方法
Jan 12 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
使用Keras实现简单线性回归模型操作
Jun 12 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
Aug 27 Python
如何设置PyCharm中的Python代码模版(推荐)
Nov 20 Python
python随机打印成绩排名表
Jun 23 Python
Python Django获取URL中的数据详解
Nov 01 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
hessian 在PHP中的使用介绍
2010/12/13 PHP
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
php之可变变量的实例详解
2017/09/12 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
关于js类的定义
2011/06/28 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
2019/10/16 Javascript
python解析html开发库pyquery使用方法
2014/02/07 Python
Python lambda和Python def区别分析
2014/11/30 Python
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
使用Python实现简单的服务器功能
2017/08/25 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
2019/09/26 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
CSS3教程(9):设置RGB颜色
2009/04/02 HTML / CSS
css3高级选择器使用方法
2013/12/02 HTML / CSS
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
女方婚礼新郎答谢词
2014/01/11 职场文书
2014年高三毕业生自我评价
2014/01/11 职场文书
幼儿园元旦家长感言
2014/02/27 职场文书
住宅使用说明书
2014/05/09 职场文书
食品安全处置方案
2014/06/14 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
2014年教研员工作总结
2014/12/23 职场文书
毕业生自荐信范文
2015/03/05 职场文书
设备技术员岗位职责
2015/04/11 职场文书
解除处分决定书
2015/06/25 职场文书
学校标语口号大全
2015/12/26 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript