从递归看动态规划
前情提要
在上一篇文章(从贪心算法开始认识动态规划——硬币找零问题)里,我们已经学习了贪心算法的思想,并且发现贪心算法是一种使用局部最优思想解题的算法,即从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的速度去求得更好的解,当达到算法中的某一步不能再继续前进时,算法停止。
通过硬币找零问题,我们也发现了贪心算法本身的局限性:不能保证求得的最后解是最佳的
因此,我们需要从整体最优的角度来解决算法问题。
最优问题的本质
所谓最优化问题,就是指在某些约束条件下,决定可选择的变量应该取何值,使所选定的目标函数达到最优的问题。
从数学意义上说,最优化方法是一种求极值的方法,即在一组约束为等式或不等式的条件下,使系统的目标函数达到极值,即最大值或最小值。在数学里一切都是函数,现在我们先把这个问题用函数形式来表示。
目标函数
假定给出 y 元硬币,硬币面额是 5 元和 3 元,求出需要的最少硬币数量。所谓的最少硬币数量就是 5 元硬币和 3 元硬币的总数,假定 5 元硬币数量为 x 0 x_0 x0,3 元硬币数量为 x 1 x_1 x1,那么用函数表示就是:
- f ( x 0 , x 1 ) = x 0 + x 1 f(x_0,x_1)=x_0+x_1 f(x0,x1)=x0+x1
这就是所谓的“目标函数”
但是这个函数现在是没有任何限制的,我们希望对此进行约束,使得 5 元硬币和 3 元硬币的面值综合为 y。为此我们需要给出一个约束:
- 5 x 0 + 3 x 1 = y 5x_0+3x_1=y 5x0+3x