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 文件和路径操作函数小结
Nov 23 Python
python脚本设置系统时间的两种方法
Feb 21 Python
python线程池threadpool实现篇
Apr 27 Python
如何使用Python实现斐波那契数列
Jul 02 Python
Python实现图片添加文字
Nov 26 Python
Django通用类视图实现忘记密码重置密码功能示例
Dec 17 Python
python dataframe NaN处理方式
Dec 26 Python
基于pygame实现童年掌机打砖块游戏
Feb 25 Python
django自定义非主键自增字段类型详解(auto increment field)
Mar 30 Python
细说NumPy数组的四种乘法的使用
Dec 18 Python
python中threading和queue库实现多线程编程
Feb 06 Python
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
May 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 分页类 扩展代码
2009/06/11 PHP
基于PHP遍历数组的方法汇总分析
2013/06/08 PHP
thinkphp分页集成实例
2017/07/24 PHP
php apache开启跨域模式过程详解
2019/07/08 PHP
PHP 实现缩略图
2021/03/09 PHP
JavaScript 中的事件教程
2007/04/05 Javascript
jquery插件 cluetip 关键词注释
2010/01/12 Javascript
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
jQuery的初始化与对象构建之浅析
2011/04/12 Javascript
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
js HTML5 Ajax实现文件上传进度条功能
2016/02/13 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
BootStrap Validator 根据条件在JS中添加或移除校验操作
2017/10/12 Javascript
Vue异步加载about组件
2017/10/31 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
Vue 进阶之路(三)
2019/04/18 Javascript
typescript nodejs 依赖注入实现方法代码详解
2019/07/21 NodeJs
ionic2.0双击返回键退出应用
2019/09/17 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
python输出100以内的质数与合数实例代码
2018/07/08 Python
python对常见数据类型的遍历解析
2019/08/27 Python
在django-xadmin中APScheduler的启动初始化实例
2019/11/15 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
2020/04/01 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
2020/06/18 Python
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
美国知名的家庭连锁百货商店:Boscov’s
2017/07/27 全球购物
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
结构和类有什么异同
2012/07/16 面试题
解决python 输出到csv 出现多空行的情况
2021/03/24 Python
2015年人事专员工作总结
2015/04/29 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
Python机器学习之PCA降维算法详解
2021/05/19 Python
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle
Go归并排序算法的实现方法
2022/04/06 Golang