python實現動態規劃求解最長公共子串行

2021-10-01 04:33:00 字數 1126 閱讀 7097

動態規劃問題一般有兩個特徵:最優子結構 以及 重疊子問題。

在求解最長公共子串行的時候,所謂的「最優」即是「最長」,重疊子問題是指這個問題可以劃分為很多個子問題,其中有些子問題的解是相同的。

具體的原理這裡不再贅述,下面給出python實現的**。

def

lcs(a, b)

:# b作為行,a作為列

c =[(

[0]*

(len

(b)+1)

)for i in

range

(len

(a)+1)

]#列表解析的方法初始化了乙個二維矩陣

for i in

range(1

,len

(a)+1)

:for j in

range(1

,len

(b)+1)

:if a[i-1]

== b[j-1]

: c[i]

[j]= c[i -1]

[j -1]

+1else

: c[i]

[j]=

max(c[i -1]

[j], c[i]

[j -1]

)for _ in c:

#列印二維矩陣

print

(_)print

(c[len

(a)]

[len

(b)]

)#列印最長公共子串行的長度

mylista =

['b'

,'d'

,'c'

,'a'

,'b'

,'a'

]mylistb =

['a'

,'b'

,'c'

,'b'

,'d'

,'a'

,'b'

]lcs(mylista, mylistb)

下面給出結果的截圖:

python動態規劃實現硬幣求解問題

動態規劃策略通常用於求解最優化問題,在這類問題中,可能會有許多行解,每乙個解都對應乙個值,我們希望找到具有最優值的那個解。動態規劃原理 動態規劃演算法將待求解問題拆分成一系列相互交疊的子問題,通過遞推關係定義各子問題的求解策略,並隨時記錄子問題的解,最終獲得原始問題的解,避免了對交疊子問題的重複求解...

動態規劃python實現

考慮乙個場景 當你有去沙漠旅行,你有乙個揹包和一些物品,揹包有最大承受重量,物品也有重量和價值,而物品種類很多,不可能全都裝在揹包裡,如何去選取價值總量最高的物品組合呢?物品名價值 water 10book 3food 9jacket 5camera 6物品名 重量water 3kgbook 1kg...

動態規劃 數塔問題求解 C 實現

file name digital tower.cpp function 動態規劃 數塔問題求解 c 實現 created on 2016年6月17日 author beijiwei qq.com 任何單位和個人不經本人允許不得用於商業用途 912 15 10 6 8 2 18 9 5 19 7 1...