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 28 Python
python多线程threading.Lock锁用法实例
Nov 01 Python
Python下使用Psyco模块优化运行速度
Apr 05 Python
python中随机函数random用法实例
Apr 30 Python
Python基于Tkinter实现的记事本实例
Jun 17 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
Dec 22 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
Mar 20 Python
Python虚拟环境的原理及使用详解
Jul 02 Python
Python BeautifulReport可视化报告代码实例
Apr 13 Python
python构造IP报文实例
May 05 Python
python实现粒子群算法
Oct 15 Python
一文搞懂如何实现Go 超时控制
Mar 30 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生成gif动画的方法
2015/11/05 PHP
PHP中addslashes与mysql_escape_string的区别分析
2016/04/25 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
windows系统php环境安装swoole具体步骤
2021/03/04 PHP
javascript里的条件判断
2007/02/27 Javascript
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
javascript 精粹笔记
2010/05/09 Javascript
jQuery在html有效在jsp无效的原因及解决方法
2013/08/02 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
JavaScript重载函数实例剖析
2016/05/13 Javascript
Bootstrap基本组件学习笔记之进度条(15)
2016/12/08 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
详解AngularJS controller调用factory
2017/05/19 Javascript
js闭包学习心得总结
2018/04/17 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
2018/07/10 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
JavaScript使用闭包模仿块级作用域操作示例
2019/01/21 Javascript
extjs图形绘制之饼图实现方法分析
2020/03/06 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
python创建和使用字典实例详解
2013/11/01 Python
名片管理系统python版
2018/01/11 Python
Python之列表的插入&替换修改方法
2018/06/28 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
Python中类的创建和实例化操作示例
2019/02/27 Python
python实现智能语音天气预报
2019/12/02 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
纯CSS3实现带动画效果导航菜单无需js
2013/09/27 HTML / CSS
New Balance英国官方网站:始于1906年,百年慢跑品牌
2016/12/07 全球购物
外贸学院会计专业应届生求职信
2013/11/14 职场文书
八年级数学教学反思
2014/01/31 职场文书
宝宝满月祝酒词
2015/08/10 职场文书