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查找第k小元素代码分享
Dec 18 Python
使用go和python递归删除.ds store文件的方法
Jan 22 Python
简单介绍Python中的len()函数的使用
Apr 07 Python
Python中的map()函数和reduce()函数的用法
Apr 27 Python
python实现bucket排序算法实例分析
May 04 Python
Python 探针的实现原理
Apr 23 Python
python如何派生内置不可变类型并修改实例化行为
Mar 21 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
Nov 20 Python
PyQt5实现简易电子词典
Jun 25 Python
python TK库简单应用(实时显示子进程输出)
Oct 29 Python
基于Python3.7.1无法导入Numpy的解决方式
Mar 09 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
Apr 02 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中禁止单个IP与ip段访问的代码小结
2012/07/04 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
php常见的魔术方法详解
2014/12/25 PHP
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
firefo xml 读写实现js代码
2009/06/11 Javascript
利用js读取动态网站从服务器端返回的数据
2014/02/10 Javascript
js图片预加载示例
2014/04/30 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
jQuery实现滚动效果
2017/11/17 jQuery
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
vue组件通信传值操作示例
2019/01/08 Javascript
详解小程序退出页面时清除定时器
2019/04/28 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
vue的$http的get请求要加上params操作
2020/11/12 Javascript
[40:06]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第一场
2018/04/04 DOTA
[02:51]2018年度DOTA2最佳中单位选手-完美盛典
2018/12/17 DOTA
python函数缺省值与引用学习笔记分享
2013/02/10 Python
python实现提取百度搜索结果的方法
2015/05/19 Python
使用Python写CUDA程序的方法
2017/03/27 Python
Python与R语言的简要对比
2017/11/14 Python
使用pandas读取csv文件的指定列方法
2018/04/21 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
python切片作为占位符使用实例讲解
2021/02/17 Python
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
Puma印度官网:德国运动品牌
2019/10/06 全球购物
研究生毕业鉴定
2014/01/29 职场文书
金融事务专业求职信
2014/04/25 职场文书
舞蹈专业求职信
2014/06/13 职场文书
主题党日活动总结
2014/07/08 职场文书
信仰心得体会
2014/09/05 职场文书
学校班子个人对照检查材料思想汇报
2014/09/27 职场文书
政风行风评议个人心得体会
2014/10/29 职场文书
转学证明范本
2015/06/19 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis