Python 中最長公共子序列的長度
子序列是在不改變剩余字符的順序的情況下,在刪除一些字符或不刪除任何字符后從給定序列獲得的序列。 最長公共子序列是指所有給定序列共有的最長子序列。
本篇文章講介紹在 Python 中查找兩個序列之間最長公共子序列的長度。
使用 Naive 方法在 Python 中查找最長公共子序列
假設(shè)我們有兩個序列:S1 和 S2,其中:
S1 = QEREW S2 = QWRE
這里,常見的子序列是 QE、QW、QR、QRE 和 RE。 其中最長的公共子序列是QRE,長度為3。
現(xiàn)在,讓我們看看打印最長公共子序列長度的 Python 解決方案。
代碼:
def LCS(S1, S2, x, y): if x == 0 or y == 0: return 0 if S1[x - 1] == S2[y - 1]: return LCS(S1, S2, x - 1, y - 1) + 1 return max(LCS(S1, S2, x, y - 1), LCS(S1, S2, x- 1, y)) S1 = "QEREW" S2 = "QWRE" x = len(S1) y = len(S2) print ("Length of LCS is", LCS(S1, S2, x, y))
輸出:
Length of LCS is 3
這種方法是用遞歸方法解決 Python 中的 LCS 問題。 它檢查給定序列的所有可能子序列并找到最長的公共子序列。
使用動態(tài)規(guī)劃在 Python 中查找最長公共子序列
動態(tài)規(guī)劃是普通遞歸方法的優(yōu)化。 正如我們所看到的,遞歸方法中存在重疊的子問題,具有許多重復(fù)的函數(shù)調(diào)用。
動態(tài)方法將每個函數(shù)調(diào)用的結(jié)果保存在一個數(shù)組中,以便在需要時使用。 結(jié)果,它減少了函數(shù)調(diào)用的次數(shù)。
代碼:
def LCS(S1, S2, m, n): R = [[None]*(n+1) for i in range(m+1)] for i in range(m+1): for j in range(n+1): if i == 0 or j == 0: R[i][j] = 0 elif S1[i-1] == S2[j-1]: R[i][j] = R[i-1][j-1] + 1 else: R[i][j] = max(R[i-1][j], R[i][j-1]) return R[m][n] S1 = "QEREW" S2 = "QWRE" m = len(S1) n = len(S2) print("Length of LCS is",LCS(S1, S2, m, n))
輸出:
Length of LCS is 3
這種方法更快、更有效,因為它具有 O(mn)
的時間復(fù)雜度。
到此這篇關(guān)于Python 中的最長公共子序列的文章就介紹到這了,更多相關(guān)Python最長公共子序列內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python讀取目錄下所有的jpg文件,并顯示第一張圖片的示例
今天小編就為大家分享一篇python讀取目錄下所有的jpg文件,并顯示第一張圖片的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06python多線程、網(wǎng)絡(luò)編程、正則表達(dá)式詳解
這篇文章主要介紹了python多線程、網(wǎng)絡(luò)編程、正則表達(dá)式,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12Python OpenCV基于霍夫圈變換算法檢測圖像中的圓形
這篇文章主要介紹了通過霍夫圈變換算法檢測圖像中的圓形,文中用到的函數(shù)為cv2.HoughCircles(),該函數(shù)可以很好地檢測圓心。感興趣的小伙伴可以了解一下2021-12-12pycharm內(nèi)無法import已安裝的模塊問題解決
今天小編就為大家分享一篇pycharm內(nèi)無法import已安裝的模塊問題解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02python遞歸函數(shù)求n的階乘,優(yōu)缺點及遞歸次數(shù)設(shè)置方式
這篇文章主要介紹了python遞歸函數(shù)求n的階乘,優(yōu)缺點及遞歸次數(shù)設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04pip安裝python庫時報Failed?building?wheel?for?xxx錯誤的解決方法
最近在使用pip安裝python的時候遇到些問題,所以下面這篇文章主要給大家介紹了關(guān)于pip安裝python庫時報Failed?building?wheel?for?xxx錯誤的解決方法,需要的朋友可以參考下2023-01-01