python实现最长公共子序列
作者:littlethunder 时间:2023-06-14 20:53:42
最长公共子序列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.递归定义最优值
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('')
运行结果输出如下:
4.根据计算最优值得到的信息,构造最优解
上图是运行结果,第一个矩阵是计算公共子序列长度的,可以看到最长是4;第二个矩阵是构造这个最优解用的;最后输出一个最优解BCBA。
来源:https://%bcnet%/littlethunder/article/details/25637173
标签:python,最长公共子序列
0
投稿
猜你喜欢
无忧贴子管理器(ListView组件)
2009-01-02 17:56:00
javascript开发中使用onpropertychange,oninput事件解决onchange事件的不足
2024-04-26 17:14:12
ASP基础教程:常用的 ASP ActiveX 组件
2008-10-14 15:15:00
python字符串常用方法
2023-07-12 19:01:50
Python在后台自动解压各种压缩文件的实现方法
2022-10-04 17:59:59
Python编程中归并排序算法的实现步骤详解
2023-06-05 09:38:23
全面了解python中的类,对象,方法,属性
2021-10-07 10:54:50
一个二级伸缩下拉菜单代码
2008-06-24 18:12:00
Java开发之Spring连接数据库方法实例分析
2024-01-26 02:00:54
python使用xauth方式登录饭否网然后发消息
2021-04-18 08:11:54
Python算法之栈(stack)的实现
2022-09-01 15:26:15
Python的Django框架中的URL配置与松耦合
2022-11-19 10:23:33
简单了解python变量的作用域
2022-07-21 13:10:08
FckEditor配置手册中文教程详细说明
2010-02-28 12:37:00
JavaScript版无组件上传类
2007-10-06 23:16:00
Python中IP地址处理IPy模块的方法
2023-05-19 05:21:25
ecshop百度编辑器远程下载无后缀的图片,并且加水印
2023-08-14 17:31:41
用ASP在线创建Word与Excel文档
2008-07-20 19:17:00
Python学习笔记之解析json的方法分析
2022-01-08 05:01:28
python编程使用PyQt创建UE蓝图
2023-11-20 14:24:58