递推与递归,分治法、贪心、动态规划的区别

递推与递归,分治法、贪心、动态规划的区别

    • 动态规划 简介:
    • 贪心法 简介:
    • 动态规划法 与 分治法 比较:
    • 贪心法 与 动态规划法 比较:
    • 递推 和 递归 区别:

动态规划 简介:

动态规划(Dynamic Programming, DP) : 是一种用来解决一类 最优化问题 的算法思想。简单来说,动态规划将一个 复杂的问题分解成若干个子问题,通过综合子问题的最优解来得到原问题的最优解。需要注意的是,动态规划会将每个求解过的子问题的解记录下来,这样当下一次碰到同样的子问题时,就可以直接使用之前记录的结果,而不是重复计算。

使用动态规划算法的两个基本要素
(1)重叠子问题;
(2)最优子结构特性。

一般可以使用递归或者递推的写法来实现动态规划,其中递归写法在此处又称作记忆化搜索。

贪心法 简介:

贪心法:是指所求问题的 整体最优解 可以通过一系列 局部最优 得到,总是做出在当前看来是最好的选择。不从整体最优上加以考虑,所做出的是在某种意义上的局部最优解,不能保证对所有问题都能得到整体最优解

动态规划法 与 分治法 比较:

  1. 共同点:都是将问题分解为子问题,然后合并子问题的解得到原问题的解。
  2. 区别:
    动态规划 解决的问题一定是最优化问题,并且拥有重叠子问题
    分治法 解决的问题不一定是最优化问题,分解出的子问题是不重叠的(如归并排序、快速排序)

贪心法 与 动态规划法 比较:

  1. 共同点:都要求原问题必须有最优子结构(“最优子结构” 指的是:一个问题的最优解可以由其子问题的最优解有效的构造出来)。

  2. 区别:
    贪心法:类似于“自顶向下”,但是并不等待子问题求解完毕后再选择使用哪一个, 而是通过某种策略直接选择一个子问题去求解,没被选择的子问题就不去求解了,直接抛弃,是一种单链的流水方式。最终不一定能得到最优解

    动态规划:不论是自底向上还是自顶向下的计算方式,都是从边界开始向上得到目标问题的解。即:他总会考虑所有子问题。

递推 和 递归 区别:

  1. 使用递推写法的计算方式是自底向上(Bottom-up Approach),即从边界开始,不断向上解决问题,直到解决了目标问题;
  2. 而使用递归写法的计算方式是自顶向下(Top-down Approach), 即从目标问题开始,将它分解成子问题的组合,直到分解至边界为止。

你可能感兴趣的:(算法)