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实现排序算法
Feb 14 Python
浅谈Python中数据解析
May 05 Python
轻松掌握python设计模式之策略模式
Nov 18 Python
python模块之re正则表达式详解
Feb 03 Python
Python3处理HTTP请求的实例
May 10 Python
Python3使用turtle绘制超立方体图形示例
Jun 19 Python
Python Pandas批量读取csv文件到dataframe的方法
Oct 08 Python
python 实现从高分辨图像上抠取图像块
Jan 02 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
May 16 Python
Django多数据库联用实现方法解析
Nov 12 Python
一个入门级python爬虫教程详解
Jan 27 Python
Python制作表白爱心合集
Jan 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
PHP网站基础优化方法小结
2008/09/29 PHP
PHP 金额数字转换成英文
2010/05/06 PHP
php 生成文字png图片的代码
2011/04/17 PHP
PHP获取MySql新增记录ID值的3种方法
2014/06/24 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
PHP实现新型冠状病毒疫情实时图的实例
2020/02/04 PHP
再谈IE中Flash控件的自动激活 ObjectWrap
2007/03/09 Javascript
jquery之Document元素选择器篇
2008/08/14 Javascript
JS 常用校验函数
2009/03/26 Javascript
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
2013/11/18 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
2014/06/27 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
JavaScript中的replace()方法使用详解
2015/06/06 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
python实现读取并显示图片的两种方法
2017/01/13 Python
深入理解python中的select模块
2017/04/23 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
2018/04/26 Python
对PyQt5中的菜单栏和工具栏实例详解
2019/06/20 Python
对Django url的几种使用方式详解
2019/08/06 Python
Python图片的横坐标汉字实例
2019/12/04 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
区分python中的进程与线程
2020/08/13 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
Falconeri美国官网:由羊绒和羊毛制成的针织服装
2018/04/08 全球购物
开办饭店创业计划书
2013/12/28 职场文书
五一家具促销方案
2014/01/10 职场文书
直接有效的自我评价
2014/01/11 职场文书
2015年毕业生自我鉴定模板
2014/09/19 职场文书
2015年护士节活动策划方案
2015/05/04 职场文书