(十三)算法设计思想之“动态规划”
生活随笔
收集整理的這篇文章主要介紹了
(十三)算法设计思想之“动态规划”
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
算法設計思想之“動態規劃”
- 動態規劃是什么?
- 動態規劃的步驟
- LeetCode:70.爬樓梯
- LeetCode:198.打家劫舍
- 思考題
動態規劃是什么?
動態規劃是算法設計中的一種方法
它將一個問題分解為相互重疊的子問題,通過反復求解子問題,來解決原來的問題
最大區別在于子問題是否獨立,子問題相互重疊是動態規劃,子問題獨立就是分而治之
動態規劃的步驟
定義子問題
反復執行
LeetCode:70.爬樓梯
解題思路
爬到第n階可以在第n-1階爬1個臺階,或者在第n-2階爬2個臺階
F(n) = F(n-1) + F(n-2)
使用動態規劃
解題步驟
定義子問題:F(n) = F(n-1) + F(n-2)
反復執行:從2循環到n執行上述公式
時間復雜度O(n),空間復雜度O(n)
時間復雜度O(n),空間復雜度O(1)
LeetCode:198.打家劫舍
解題思路
f(k) = 從前k個房屋中能偷竊到的最大數額
Ak = 第k個房屋的錢數
f(k) = max(f(k-2) + Ak,f(k - 1))
考慮使用動態規劃
解題步驟
定義子問題:f(k) = max(f(k-2) + Ak,f(k - 1))
反復執行:從2循環到n,執行上述公式
時間復雜度O(n),空間復雜度O(n)
時間復雜度O(n),空間復雜度O(1)
思考題
1、說出動態規劃算法的套路步驟。
2、完成打家劫舍2,地址:https://leetcode-cn.com/problems/house-robber-ii/
總結
以上是生活随笔為你收集整理的(十三)算法设计思想之“动态规划”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三星:将把生成式人工智能引入手机、平板和
- 下一篇: 王者荣耀点券怎么退回