前端之算法(七)动态规划
大家好,今天我们要聊的是动态规划这种方法,它和分而治之一样,也是算法设计中的一种方法,你同样可以把它当作解决问题的一种思路。接下来让我来看看动态规划是什么?
动态规划
动态规划是算法设计中地一种方法。
它将一个问题分解为
相互重叠
的子问题,通过反复求解子问题,来解决原来的问题。看到这,你会发现它分而治之是一样的。其实不然,分而治之,是把问题分解成相互独立的子问题,而动态规划是把问题分解成相互重叠的子问题。
那什么是相互重叠呢?
可以给大家举一个很典型的列子。
斐波那契数列
从第三个数开始,所有值都等于它前个两个值之和。
那怎么解决斐波那契数列呢?
这个时候就要用到动态规划了。
定义子问题:F(n) = F(n - 1) + F(n - 2)
反复执行:从 2 循环到 n,执行上述公式。
这时候我们发现每个子问题都是一套公式,通过这套公式反复求解,这就是相互重叠的。
LeetCode:70.爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
复制代码
解题思路
爬到第 n 阶可以在第 n - 1 阶爬一个台阶,或者在第 n - 2 阶爬 2 个台阶。
F(n) = F(n - 1) + F(n - 2)
复制代码
End~
评论