算法设计思想之“动态规划”
动态规划是什么?
动态规划是算法设计中的一种方法
它将一个问题分解为相互重叠的子问题,通过反复求解子问题,来解决原来的问题


最大区别在于子问题是否独立,子问题相互重叠是动态规划,子问题独立就是分而治之
动态规划的步骤
定义子问题
反复执行
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/
本文介绍了动态规划的概念,强调了它与分治法的区别,并通过LeetCode的70.爬楼梯和198.打家劫舍问题详细解释了解题步骤。动态规划的核心在于定义子问题并反复执行,以达到解决原问题的目的。每个问题的时间复杂度和空间复杂度都在O(n)范围内。
算法设计思想之“动态规划”&spm=1001.2101.3001.5002&articleId=108776048&d=1&t=3&u=5a76352b887e41de8849ba443db02666)
5万+

被折叠的 条评论
为什么被折叠?



