算法分析与设计----动态规划

动态规划的原理

基本思想:将待求问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。

基本要素: 最优子结构  重叠子问题

设计动态规划算法的步骤:

找出最优解的性质,并刻画其结构特征;

递归地定义最优值;

以自底向上的方式计算最优值;

根据计算最优值时得到的信息构造最优解。

动态规划与分治法的异同

共同点:

将待求解的问题分解成若干子问题,先求解子问题,然后再从这些子问题的解得到原问题的解。

不同点:

  1. 适合于用动态规划法求解的问题,分解得到的各子问题往往不是相互独立的;而分治法中子问题相互独立。
  2. 动态规划法用表保存已求解过的子问题的解,再次碰到同样的子问题时不必重新求解,而只需查询答案,故可获得多项式级时间复杂度,效率较高;而分治法中对于每次出现的子问题均求解,导致同样的子问题被反复求解,故产生指数增长的时间复杂度,效率较低。

动态规划与贪心算法的异同

共同点:

动态规划算法和贪心算法都属于递推算法,并且这两个算法适用的问题都具有最优子结构性质,都利用局部最优解来推导全局最优解。

不同点:

  1. 求解方式不同:动态规划法:自底向上;具有最优子结构性质的问题有些只能用动态规划法,有些可用贪心法。贪心法:自顶向下;
  2. 对子问题的依赖不同:动态规划法:依赖于各子问题的解,所以应使各子问题最优,才能保证整体最优;贪心法:依赖于过去所作过的选择,但决不依赖于将来的选择,也不依赖于子问题的解。

你可能感兴趣的:(算法分析与设计,数据结构)