日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Python求兩個字符串最長公共子序列代碼實例

瀏覽:24日期:2022-08-03 18:39:27

一、問題描述

給定兩個字符串,求解這兩個字符串的最長公共子序列(Longest Common Sequence)。比如字符串1:BDCABA;字符串2:ABCBDAB。則這兩個字符串的最長公共子序列長度為4,最長公共子序列是:BCBA

二、算法求解

這是一個動態規劃的題目。對于可用動態規劃求解的問題,一般有兩個特征:①最優子結構;②重疊子問題

①最優子結構

設X=(x1,x2,...,xn)和Y=(y1,y2,...,ym)是兩個序列,將X和Y的最長公共子序列記為LCS(X,Y)

找出LCS(X,Y)就是一個最優化問題。因為,我們需要找到X和Y中最長的那個公共子序列。而要找X和Y的LCS,首先考慮X的最后一個元素和Y的最后一個元素。

⑴如果xn=ym,即X的最后一個元素與Y的最后一個元素相同,這說明該元素一定位于公共子序列中。因此,現在只需要找:LCS(Xn-1,Ym-1)

LCS(Xn-1,Ym-1)就是原問題的一個子問題。為什么叫子問題?因為它的規模比原問題小。

為什么是最優的子問題?因為我們要找的是Xn-1和Ym-1的最長公共子序列啊。最長的!換句話說就是最優的那個。

⑵如果xn!=ym,這下要麻煩一點,因為它產生了兩個子問題:LCS(Xn-1,Ym)和LCS(Xn,Ym-1)

因為序列X和序列Y的最后一個元素不相等,那說明最后一個元素不可能是最長公共子序列中的元素。

LCS(Xn-1,Ym)表示:最長公共序列可以在(x1,x2,...xn-1)和(y1,y2,...,ym)中找。

LCS(Xn,Ym-1)表示:最長公共序列可以在(x1,x2,...xn)和(y1,y2,...,ym-1)中找。

求解上面兩個子問題,得到的公共子序列誰最長,那誰就是LCS(X,Y)。用數學表示就是:

LCS=max{LCS(Xn-1,Ym),LCS(Xn,Ym-1)}

由于條件⑴和⑵考慮到了所有可能的情況。因此,我們成功的把原問題轉化成了三個規模更小的問題。

②重疊子問題

重疊子問題是什么?就是說原問題轉化成子問題后,子問題中有相同的問題。

原問題是:LCS(X,Y)。子問題有❶LCS(Xn-1,Ym-1)❷ LCS(Xn-1,Ym)❸ LCS(Xn,Ym-1)

乍一看,這三個問題是不重疊的。可本質上它們是重疊的,因為它們只重疊了一大部分。舉例:

第二個子問題:LCS(Xn-1,Ym)就包含了問題❶LCS(Xn-1,Ym-1),為什么?

因為,當Xn-1和Ym的最后一個元素不相同時,我們又需要將LCS(Xn-1,Ym-1)進行分解:分解成:LCS(Xn-1,Ym-1)和LCS(Xn-2,Ym)

也就是說:在子問題的繼續分解中,有些問題是重疊的。

由于像LCS這樣的問題,它具有重疊子問題的性質,因此:用遞歸來求解就太不劃算了。國為采用遞歸,它重復地求解了子問題,而且需要注意的是,所有子問題加起來的個數是指數級的。

那么問題來了,如果用遞歸求解,有指數級個子問題,故時間復雜度是指數級的。這指數級個子問題,難道用了動態規劃,就變成多項式時間了??

關鍵是采用動態規劃時,并不需要去一一計算那些重疊了的子問題。或者說:用了動態規劃之后,有些子問題是通過“查表”直接得到的,而不是重新又計算一遍得到的。舉個例子:比如求Fib數列。

Python求兩個字符串最長公共子序列代碼實例

求fib(5),分解成了兩個子問題:fib(4)和fib(3),求解fib(4)和fib(3)時,又分解了一系列的小問題...

從圖中可以看出:根的左右子樹:fib(4)和fib(3)下,是有很多重疊的!比如,對于fib(2),它就一共出現了三次。如果用遞歸來求解,fib(2)就會被計算三次,而用DP(Dynamic Programming)動態規劃,則fib(2)只會計算一次,其他兩次則是通過“查表”直接求得。而且,更關鍵的是:查找求得該問題的解之后,就不需要再繼續去分解該問題了。而對于遞歸,是不斷地將問題解,直到分解為基準問題(fib(0)或者fib(1))

說了這么多,還是寫下最長公共子序列的遞歸式才完整。

Python求兩個字符串最長公共子序列代碼實例

C[i,j]表示:(x1,x2,...,xi)和(y1,y2,...,yj)的最長公共子序列的長度。公式的具體解釋可參考《算法導論》動態規劃章節

三、LCS Python代碼實現

#! /usr/bin/env python3# -*- coding:utf-8 -*-# Author : mayi# Blog : http://www.cnblogs.com/mayi0312/# Date : 2019/5/16# Name : test03# Software : PyCharm# Note : 用于實現求解兩個字符串的最長公共子序列def longestCommonSequence(str_one, str_two, case_sensitive=True): ''' str_one 和 str_two 的最長公共子序列 :param str_one: 字符串1 :param str_two: 字符串2(正確結果) :param case_sensitive: 比較時是否區分大小寫,默認區分大小寫 :return: 最長公共子序列的長度 ''' len_str1 = len(str_one) len_str2 = len(str_two) # 定義一個列表來保存最長公共子序列的長度,并初始化 record = [[0 for i in range(len_str2 + 1)] for j in range(len_str1 + 1)] for i in range(len_str1): for j in range(len_str2): if str_one[i] == str_two[j]:record[i + 1][j + 1] = record[i][j] + 1 elif record[i + 1][j] > record[i][j + 1]:record[i + 1][j + 1] = record[i + 1][j] else:record[i + 1][j + 1] = record[i][j + 1] return record[-1][-1]if __name__ == ’__main__’: # 字符串1 s1 = 'BDCABA' # 字符串2 s2 = 'ABCBDAB' # 計算最長公共子序列的長度 res = longestCommonSequence(s1, s2) # 打印結果 print(res) # 4

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩欧美在线精品| 亚洲日本在线观看视频| 久久精品国产免费| 视频一区二区三区在线| 国产高清视频一区二区| 国产精品国产一区| 亚洲天堂日韩在线| 91精品一区二区三区综合在线爱| 日本成人中文字幕在线视频| 荡女精品导航| 五月天激情综合网| 欧美国产偷国产精品三区| 日韩av中文字幕一区二区三区| 久久一区二区三区电影| 国产suv精品一区二区四区视频| 亚洲精品观看| 亚洲精品成人| 欧美搞黄网站| 欧美亚洲精品在线| 久久精品91| 天堂√8在线中文| 91嫩草亚洲精品| 国产精品玖玖玖在线资源| 日韩中文字幕亚洲一区二区va在线 | 午夜欧美精品| 婷婷精品进入| 影音先锋久久| 亚洲天堂一区二区| 精品美女久久| 久久精品91| 欧洲毛片在线视频免费观看| 999国产精品永久免费视频app| 日韩国产一区二区三区| 高清一区二区| 日韩一级欧洲| 欧美精品三级在线| 成人午夜网址| 国产在线日韩| 亚洲a级精品| 国产一区二区三区不卡av| 久久精品电影| 亚洲色图综合| 国产欧美日韩精品一区二区免费| 精品免费av| 欧美一区=区| 麻豆视频一区二区| 亚洲午夜91| 91精品国产自产精品男人的天堂| 国产精品亚洲产品| 欧美日韩国产v| 日本欧美在线看| 久久香蕉精品香蕉| 日本久久成人网| 日韩激情中文字幕| 日本欧美不卡| 久久激情综合网| 欧美日韩国产高清电影| 亚洲有吗中文字幕| 日韩成人免费| 视频一区二区三区中文字幕| 国产精品高颜值在线观看| 日韩二区在线观看| 91精品成人| 欧美日韩18| 欧洲激情综合| 最新中文字幕在线播放 | 欧美日韩高清| 国产一区调教| 97成人在线| 亚洲有吗中文字幕| 午夜欧美精品久久久久久久| 成人在线视频中文字幕| 欧美交a欧美精品喷水| 亚洲手机视频| 国产精品三p一区二区| 欧美精品资源| 国内自拍视频一区二区三区| 日韩视频1区| 日韩国产欧美视频| 日韩中文av| 日韩精品a在线观看91| 亚洲久草在线| 亚洲精品视频一二三区| 麻豆精品网站| 亚洲一级大片| 天堂久久av| 国产精品1luya在线播放| 国产精品亚洲四区在线观看 | 欧美日韩亚洲在线观看| 国产成年精品| 中国字幕a在线看韩国电影| 国际精品欧美精品| 天堂а√在线最新版中文在线| 捆绑调教日本一区二区三区| 99精品视频在线观看免费播放| 精品淫伦v久久水蜜桃| 国产精品男女| а√天堂8资源中文在线| 日本不卡免费高清视频在线| 日韩精品中文字幕第1页| 精品三级久久| 免费在线观看视频一区| 亚洲综合五月| 日韩av中文字幕一区二区| 日韩精品视频网站| 欧美激情在线精品一区二区三区| 国产不卡一区| 石原莉奈在线亚洲三区| 国产精品黄色| 欧美网站在线| 老色鬼精品视频在线观看播放| 国产精品va| 国产高清一区| 日韩精品导航| 99视频精品全国免费| 日本欧美在线看| 久久精品资源| 尹人成人综合网| 日韩欧美久久| 日韩电影免费在线观看| 亚洲va久久| 久久网站免费观看| 国产精品嫩模av在线| 伊人久久亚洲美女图片| 九九99久久精品在免费线bt| 综合亚洲自拍| 国产不卡精品| 国产欧美在线观看免费| 午夜在线观看免费一区| 亚洲精品88| 黄色欧美在线| 久久av中文| 青青草伊人久久| 亚洲天堂免费电影| 国产精品mm| 亚洲女同一区| 国产精品精品| 国产欧美一区二区三区国产幕精品| 亚洲激情av| 不卡中文字幕| 激情综合自拍| 日韩一区二区在线免费| 成人国产精选| 国产成人免费| 国产中文欧美日韩在线| 国产精品jk白丝蜜臀av小说| 91欧美日韩在线| 国产亚洲第一伦理第一区| 国产亚洲午夜| 精品一区免费| 国产高清一区二区| 99视频一区| 婷婷综合激情| 欧美在线资源| 免费人成精品欧美精品| 亚洲国产成人精品女人| 好吊一区二区三区| 黄色亚洲大片免费在线观看| 最新国产拍偷乱拍精品| 伊人久久亚洲热| 中文视频一区| 国产精品密蕾丝视频下载| 精品视频自拍| 日韩av首页| 国产综合激情| 日韩精品欧美精品| 国产精品**亚洲精品| 成人在线视频免费看| 成人日韩精品| 亚洲人成毛片在线播放女女| 国产精品xvideos88| 日韩精品免费一区二区三区| 伊人精品一区| 国产欧美日韩一区二区三区四区| 亚洲成人不卡| 日韩精品国产欧美| 亚洲天堂av影院| 中文字幕视频精品一区二区三区| 久久中文欧美| 日韩亚洲一区在线| 日韩中文字幕区一区有砖一区| 久久精品国内一区二区三区| 婷婷亚洲综合| 久久免费精品| 中文字幕一区二区三区四区久久 | 亚洲精品极品少妇16p| 日韩不卡一区二区三区| 欧洲亚洲一区二区三区| 日韩中文字幕一区二区三区| 国产成人精品一区二区三区免费 | 亚洲三级av| 日韩欧美一区二区三区在线观看| 日韩欧美美女在线观看| 久久久久久久久久久9不雅视频| 日韩免费精品| 老牛影视精品| 成人国产精品一区二区免费麻豆| 亚洲91网站| 午夜免费一区| 丝袜美腿一区|