亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

如何使用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

林芝县| 天祝| 浦江县| 射阳县| 宣化县| 广元市| 江津市| 怀化市| 九台市| 乐东| 齐河县| 鲜城| 社旗县| 山丹县| 邹城市| 山阳县| 林西县| 郓城县| 安仁县| 吴旗县| 鄂温| 平顺县| 高淳县| 通化市| 瑞安市| 上虞市| 松原市| 元阳县| 漳平市| 和龙市| 喀喇| 九寨沟县| 新乡市| 沛县| 永胜县| 宜兴市| 荔波县| 肇州县| 旅游| 常州市| 剑河县|