演算法學習系列之 動態規劃法

2021-08-19 14:15:54 字數 566 閱讀 2571

早上起來,看了一道美團面試題,是關於動態規劃的。突然發現對學過的演算法並沒有乙個系統全面的認識。於是準備把經典演算法以寫部落格的形式回顧一遍。貴在堅持!

如果問題是由交疊的子問題構成的,我們就可以運用動態規劃技術來解決它。一般來說,這樣的子問題出現在對給定問題求解的遞推關係中,這個遞推關係中包含了相同型別的更小子問題的解。動態規劃法建議,與其對交疊的子問題一次又一次的求解,還不如對所有的子問題只求解一次,並把結果儲存在一張表中,這樣就可以從表中得到原始問題的解。

能用動態規劃法解決的問題的特點:具有最優子結構性質和無後效性

最優子結構性質:問題的最優解所包含的子問題的解也是最優的

無後效性:無後效性是指如果在某個階段上過程的狀態已知,則從此階段以後過程的發展變化僅與此階段的狀態有關,而與過程在此階段以前的階段所經歷過的狀態無關。利用動態規劃

方法求解多階段決策過程問題,過程的狀態必須具備無後效性。

思路就是:首先分析問題,是否可以劃分為更小的子問題,即分析問題是否有最優子結構性質和無後效性,然後推導出問題的遞迴函式表示式,設計偽**,求解問題。

幣值最大化問題

找零問題

硬幣收集問題

動態規劃法

在學習動態規劃法之前,我們先來了解動態規劃的幾個概念 1 階段 把問題分成幾個相互聯絡的有順序的幾個環節,這些環節即稱為階段。2 狀態 某一階段的出發位置稱為狀態。3 決策 從某階段的乙個狀態演變到下乙個階段某狀態的選擇。4 狀態轉移方程 前一階段的終點就是後一階段的起點,前一階段的決策選擇匯出了後...

動態規劃法

有些問題在分解時會產生許多子問題,且分解出的自問題互相交織,因而在解這類問題時,將可能重複多次解乙個子問題。這種重複當然是不必要的,解決方法可以在解決每個子問題後把它的解 包括其子子問題的解 保留在乙個 中,若遇到求與之相同的子問題時,dp演算法又稱動態規劃,是資訊學競賽中選手必須熟練掌握的一種演算...

動態規劃法

最近遇到了一道挺有意思的演算法題 四種硬幣 1元3元4元5元 問 想要湊成n元錢最少幾枚硬幣?public class coinsgamemain fun 7,is public static void fun int k,int is i1 l min i2 if l k private stat...