动态规划与分治法一样,通过组合子问题的解而解决整个问题。但是动态规划与分治法不同的地方在于,分治法是将问题划分成一些独立的子问题,递归地求解各个子问题,然后合并子问题的解而得到原问题的解,而动态规划则是将问题问题划分成一系列不独立的子问题,也就是各子问题包含相同的孙问题。在这种情况下,分治法会做很多不必要的工作,即重复地求解公共问题的孙问题。而动态规划则只对每个孙问题只求解一次,然后将其结果保留在表中,从而避免在各个子问题的求解过程中重复计算孙问题。
动态规划适用于最优化问题。这种问题有很多可行解,每个解有一个值。我们希望找到一个具有最优值的解(可能存在多个最优解,但是我们只想求一个最优解)。
动态规划分为了四个步骤:
1.描述最优解的结构
2.递归定义最优解的值
3.按自底向上的方式计算出最优解的值
4.根据计算出的结果构造一个最优解。
前三步是动态规划的基础,可以用于求最优解的值。第四步用于计算最优解。