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 相关文章推荐
深入讲解Java编程中类的生命周期
Feb 05 Python
Python实现计算最小编辑距离
Mar 17 Python
Python实现两个list对应元素相减操作示例
Jun 09 Python
分享几道你可能遇到的python面试题
Jul 24 Python
Python实现合并两个列表的方法分析
May 28 Python
numpy.linspace函数具体使用详解
May 27 Python
Python3基础教程之递归函数简单示例
Jun 07 Python
django 使用全局搜索功能的实例详解
Jul 18 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
Aug 09 Python
在PyTorch中使用标签平滑正则化的问题
Apr 03 Python
使用python检查yaml配置文件是否符合要求
Apr 09 Python
通过代码实例了解Python sys模块
Sep 14 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数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
jquery解析XML字符串和XML文件的方法说明
2014/02/21 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
jquery dataview数据视图插件使用方法
2016/12/23 Javascript
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
2017/10/27 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
小程序开发基础之view视图容器
2018/08/21 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:36]极致酷炫!TI9典藏宝瓶+撼地者至宝展示
2019/06/11 DOTA
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
深入理解Python对Json的解析
2017/02/14 Python
将tensorflow的ckpt模型存储为npy的实例
2018/07/09 Python
python多进程实现文件下载传输功能
2018/07/28 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
python如何求圆的面积
2020/07/01 Python
运行Python编写的程序方法实例
2020/10/21 Python
pytorch中index_select()的用法详解
2021/01/06 Python
利用Node实现HTML5离线存储的方法
2020/10/16 HTML / CSS
大学生收银员求职信分享
2014/01/02 职场文书
小学教师事迹材料
2014/01/13 职场文书
高等教育学自荐书范文
2014/02/10 职场文书
建筑工程造价专业自荐信
2014/07/08 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
2015年保险公司内勤工作总结
2015/05/23 职场文书
运动会通讯稿100字
2015/07/20 职场文书
六年级作文之自救
2019/12/19 职场文书