Python 中最長(zhǎng)公共子序列的長(zhǎng)度
子序列是在不改變剩余字符的順序的情況下,在刪除一些字符或不刪除任何字符后從給定序列獲得的序列。 最長(zhǎng)公共子序列是指所有給定序列共有的最長(zhǎng)子序列。
本篇文章講介紹在 Python 中查找兩個(gè)序列之間最長(zhǎng)公共子序列的長(zhǎng)度。
使用 Naive 方法在 Python 中查找最長(zhǎng)公共子序列
假設(shè)我們有兩個(gè)序列:S1 和 S2,其中:
S1 = QEREW S2 = QWRE
這里,常見的子序列是 QE、QW、QR、QRE 和 RE。 其中最長(zhǎng)的公共子序列是QRE,長(zhǎng)度為3。
現(xiàn)在,讓我們看看打印最長(zhǎng)公共子序列長(zhǎng)度的 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 問(wèn)題。 它檢查給定序列的所有可能子序列并找到最長(zhǎng)的公共子序列。
使用動(dòng)態(tài)規(guī)劃在 Python 中查找最長(zhǎng)公共子序列
動(dòng)態(tài)規(guī)劃是普通遞歸方法的優(yōu)化。 正如我們所看到的,遞歸方法中存在重疊的子問(wèn)題,具有許多重復(fù)的函數(shù)調(diào)用。
動(dòng)態(tài)方法將每個(gè)函數(shù)調(diào)用的結(jié)果保存在一個(gè)數(shù)組中,以便在需要時(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
這種方法更快、更有效,因?yàn)樗哂?O(mn) 的時(shí)間復(fù)雜度。
到此這篇關(guān)于Python 中的最長(zhǎng)公共子序列的文章就介紹到這了,更多相關(guān)Python最長(zhǎng)公共子序列內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 爬蟲入門必學(xué):Requests 庫(kù)核心用法全解
requests是python中一個(gè)常用于發(fā)送HTTP請(qǐng)求的第三方庫(kù),它極大地簡(jiǎn)化了web服務(wù)交互的過(guò)程,本文給大家介紹python數(shù)據(jù)分析之爬蟲基礎(chǔ)requests詳解,感興趣的朋友跟隨小編一起看看吧2026-04-04
Python入門教程(十九)python的函數(shù)詳解
這篇文章主要介紹了Python入門教程(十九)python的函數(shù),函數(shù)是組織好的,可重復(fù)使用的,用來(lái)實(shí)現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段,需要的朋友可以參考下2023-04-04
如何解決flask修改靜態(tài)資源后緩存文件不能及時(shí)更改問(wèn)題
在本篇內(nèi)容里小編給大家整理的是關(guān)于如何解決flask修改靜態(tài)資源后緩存文件不能及時(shí)更改問(wèn)題,需要的朋友們可以學(xué)習(xí)下。2020-08-08
pycharm快捷鍵自動(dòng)提示documentation問(wèn)題(auto?Ctrl+Q)
這篇文章主要介紹了pycharm快捷鍵自動(dòng)提示documentation問(wèn)題(auto?Ctrl+Q),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
NumPy random.choice()函數(shù)的使用小結(jié)
隨機(jī)采樣 是一個(gè)非常常見的操作,NumPy提供的numpy.random.choice() 函數(shù)讓我們可以方便地從數(shù)組或序列中隨機(jī)選取元素,本文將帶深入介紹 numpy.random.choice() 的功能及常見實(shí)戰(zhàn)案例,感興趣的可以了解一下2026-01-01
Python 中的 global 標(biāo)識(shí)對(duì)變量作用域的影響
global 標(biāo)識(shí)用于在函數(shù)內(nèi)部,修改全局變量的值。這篇文章主要介紹了Python 的 global 標(biāo)識(shí)對(duì)變量作用域的影響,需要的朋友可以參考下2019-08-08

