91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用python實現最長公共子序列

發布時間:2021-04-07 12:51:12 來源:億速云 閱讀:355 作者:小新 欄目:開發技術

這篇文章主要介紹如何使用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實現最長公共子序列”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

博乐市| 潼南县| 平昌县| 呼和浩特市| 阿勒泰市| 鸡泽县| 平安县| 板桥市| 民和| 杭锦旗| 巩义市| 沁阳市| 封丘县| 平乡县| 镇康县| 清远市| 三原县| 铁岭市| 泸定县| 都安| 宜城市| 东乡族自治县| 中江县| 金门县| 大荔县| 开江县| 福泉市| 永济市| 和林格尔县| 益阳市| 遂平县| 滨海县| 富裕县| 平乡县| 额敏县| 东乡族自治县| 佛教| 贵阳市| 文成县| 阿拉尔市| 自贡市|