使用Python求解LCS(最长公共序列)

 时间:2024-10-11 22:31:51

1、首先获得打分矩阵:通过动态规划的编程思想,比较两序列的字符,确定打分矩阵中每个元素的数值。初始化矩阵c[i,0]=0和c[0,j]=0计算若两字符相同则c[i,j]=c[i-1,j-1]+1,否则为c[i-1,j],c[i,j-1]的最大值。

使用Python求解LCS(最长公共序列)

2、在计算打分矩阵的同时,加入方向矩阵的生成,方向矩阵一般用于回溯。代码如下:def 雉搽妤粲LCS(x,y): import numpy as np c=np.芰垄孕动zeros((len(x)+1,len(y)+1)) b=np.zeros((len(x)+1,len(y)+1)) for i in range(1,len(x)+1): for j in range(1,len(y)+1): if x[i-1]==y[j-1]: c[i,j]=c[i-1,j-1]+1 b[i,j]=2 else: if c[i-1,j]>=c[i,j-1]: c[i,j]=c[i-1,j] b[i,j]=1 else: c[i,j]=c[i,j-1] b[i,j]=3 return c,b

使用Python求解LCS(最长公共序列)

3、接下来构建回溯方法:回溯方法根据方向矩阵的数撕良滤儆值,若为2,则表示为共有元素,需要保存,回溯完整个矩阵后,结束,输出结果。代码如下:def getLCS(x,y): c,b=LCS(x,y像粜杵泳) i=len(x) j=len(y) lcs='' while i>0 and j>0: if b[i][j]==2: lcs=x[i-1]+lcs i-=1 j-=1 if b[i][j]==1: i-=1 if b[i][j]==3: j-=1 if b[i][j]==0: break return lcs

使用Python求解LCS(最长公共序列)

4、实现算法程序的伪代码如下:

使用Python求解LCS(最长公共序列)
  • linux下怎么编译汇编语言程序
  • NumPy如何使用arange方法生成矩阵#校园分享#
  • c 语言如何读取文件名
  • python如何遍历文件夹下的每个文件
  • 热门搜索
    电子手抄报怎么做 致敬抗美援朝争做时代新人手抄报 关于理想的手抄报 英语国庆节手抄报 庆国庆手抄报图片 祝福祖国手抄报 清明手抄报资料 端午手抄报图片 英语手抄报内容5年级 教师节手抄报大全图片