动态规划基本思想
动态规划与分治法类似,都是构造子问题的解来求解原问题,但是与分治法不一样的是,分治法求解的是不重叠的子问题,而动态规划恰好是解决重叠子问题,如果用分治法来解决,将会反复求解子问题,使得计算效率极低,对于重叠子问题,动态规划只需要将子问题求解一遍将其记录在一表格中,需要时调用即可,这样提高了时间上的效率,但是需要储存子问题耗费空间量大,以空间为代价换取时间,这是一个典型的时空权衡问题。具体求解动态规划有以下四个步骤:
1.刻画一个最优解的结构特征
2.递归的定义最优解的值
3.计算最优解的值,通常采用自底向上的方法
4.利用计算出来的信息构造一个最优解
前三步是求解最优解的值的步骤,如果需要最优解的信息就需要第四步
动态规划两种等价实现方法:
1.自顶向下法:此方法按自然递归方式编写,但过程会保存每一个子问题,在调用子问题时先判断子问题是否已经求解过。若果是则直接返回保存值,否则按通常方式计算这个问题。
2:自底向上法:这种方法一般需要定义子问题的规模,使得任何问题求解转化为只依赖子问题的解,然而我们将子问题按规模排序,从小到大进行求解,每个子问题求解一次并保存下来,直到所有子问题求解完成。