中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

昔阳县| 西华县| 清徐县| 怀化市| 康定县| 万宁市| 老河口市| 武宁县| 德清县| 集贤县| 滦南县| 托克逊县| 义马市| 芮城县| 阳信县| 涟水县| 株洲县| 金阳县| 花莲市| 南昌市| 宝鸡市| 青海省| 榆社县| 新巴尔虎左旗| 保亭| 温泉县| 馆陶县| 板桥市| 新竹市| 志丹县| 独山县| 师宗县| 临澧县| 晋江市| 内丘县| 科技| 新兴县| 龙海市| 浪卡子县| 泸定县| 景谷|