分治,递归,动态规划三者关系

以前学习的时候,对这些内容一知半解,三者概念往往混淆不清,现在认认真真梳理一下。

分治(divide and conquer)

分治就是分而治之,把一个复杂的,难以解决的问题分解成若干个简单的可以解决的子问题,然后逐个解决,最终合并出复杂问题的解决方案。递归和动态规划都蕴含了分治的思想。

分治可以分为:

  • 普通分治:分治的各个层次各解决方案不同
  • 递归分治:分治的各个层次各解决方案相同
递归

自顶向下,把复杂问题逐层分解直至可解决的简单问题

动态规划

自底向上,通过解决简单问题,最后合并为复杂问题的解

区别:
序号 递归 动态规划
1 耗时:会重复计算相同问题 耗内存:会记录每个问题的结果
2 代码整洁,容易理解 代码较复杂,不易理解
3 自顶向下 自底向上

参考:

  1. 分治与递归
  2. 递归和动态规划的区别
  3. 递归;分治与动态规划

你可能感兴趣的:(分治,递归,动态规划三者关系)