動態規劃問題一般有兩個特徵:最優子結構 以及 重疊子問題。
在求解最長公共子串行的時候,所謂的「最優」即是「最長」,重疊子問題是指這個問題可以劃分為很多個子問題,其中有些子問題的解是相同的。
具體的原理這裡不再贅述,下面給出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...