一.动态规划是什么
动态规划是一种算法思想,通过从问题的顶部开始,不断解决其中的小问题,使得问题得以解决.我们通常会用到数组或者表(即二维数组)来记录小问题的解决过程.
动态规划的作用
在解决一些算法问题,我们常常会使用到递归来解决问题,但是递归的效率又比较的低;这个时候我们可以使用到动态规划来解决问题;它可以大大提高我们代码的效率.,接下来博主会通过一个经典的案例来带大家浅了解一下动态规划思想
案例
背包问题
1.什么是背包问题
假设有一个背包, 背包的最大容量是13,有下列物品:
a. weight: 3, value: 4
b. weight: 4, vlaue: 6
b. weight: 5, value: 7
d. weight: 7, value: 9
那么我们怎么放才能得到最大收益
2. 递归来实现
代码:
/**
* storage 表示背包的容量
* weights 存放物品重量的数组
* values 存放物品价值的数组
* n 物品的标记
*/
function solution1(storage, weights, values, n){
//递归的出口:storage为0 或者 n为0
if(n == 0 || storage == 0)
return 0;
// weight[n-1]标的表示的是这个物品的重量, 小标从0开始的 所以索引是n-1,如果这个物品重量超过了背包容量就不放进去
if(weights[n - 1] > storage)
return solution1(storage, weights, values , n - 1);
//最后一种情况就是没有超过,那么这个物品就可以放进去,同时比较放进去,何不放进去那种总价值更高取哪种
else{
return max(solution1(storage - weights[n -1], weights, values, n -1) + values[n -1], solution1(storage, weights, values , n - 1