第七篇 動態規劃

今天跟你們分享下算法思想中比較難的一種"動態規劃",動態規劃給人像是做戰時經常使用的「迂迴戰術」,或者說是算法

游擊戰,在運動中尋找突破口。優化

一: 思想blog

   首先要了解」動態規劃「,必須先知道什麼叫作」多階段決策「,百科裏面對這個問題解釋的很全,我就load一段出來,遞歸

你們得要好好品味,好好分析。原理

 

上面圖中最後一句話就定義了動態規劃是要幹什麼的問題。im

 

二:使用規則算法複雜度

    如今咱們知道動態規劃要解決啥問題了,那麼什麼狀況下咱們該使用動態規劃呢?db

   ①  最優化原理(最優子結構性質):img

           若是一個問題的最優策略它的子問題的策略也是最優的,則稱該問題具備「最優子結構性質」。分享

   ②  無後效性:

           當一個問題被劃分爲多個決策階段,那麼前一個階段的策略不會受到後一個階段所作出策略的影響。

   ③  子問題的重疊性:

          這個性質揭露了動態規劃的本質,解決冗餘問題,重複的子問題咱們能夠記錄下來供後階段決策時

        直接使用,從而下降算法複雜度。

 

三:求解步驟

      ①   描述最優解模型。

      ②   遞歸的定義最優解,也就是構造動態規劃方程。

      ③   自底向上的計算最優解。

      ④   最後根據計算的最優值得出問題的最佳策略。

 

四:與其餘算法的差別

     ① 遞歸:  遞歸採用的是「由上而下」的解題策略並帶有可能的」子問題「重複調用,時間複雜度天然高。

                   而」動態規劃「採用」自下而上「並帶有臨時存儲器保存上一策略的最優解,空間換時間。

     ② 分治:  一樣二者都是將問題劃分爲不少的子問題,不一樣的是」動態規劃「中各子問題是相互聯繫的。

     ③ 貪心:  要注意的是貪心算法每走一步都是不可撤回的,而動態規劃是在一個問題的多種策略中尋找

                   最優策略,因此動態規劃中前一種策略可能會被後一種策略推翻。

 

五:舉例

  動態規劃中,最經典最著名的例子莫過於」揹包問題「,現有:

    蘋果: 1kg    12¥

    梨子: 1kg     3¥

    葡萄: 1kg    10¥

    板栗: 1kg    25¥  

現有一個揹包,只能裝3kg水果,那麼如何獲得物品價值最大化?

相關文章
相關標籤/搜索