目录
分治算法和动态规划算法的比较
相同点
二者都要求原问题具有最优子结构性质,都是将原问题分而治之,分解成若干个规模较小(小到很容易解决的程序)的子问题.然后将子问题的解合并,形成原问题的解.
不同点
动态规划算法 | 分治算法 | |
---|---|---|
分解的子问题 | 子问题不一定相互独立 | 子问题相互独立 |
解决问题的顺序 | 自底向上 | 自顶向下 |
效率方面 | 子问题没有重复计算(效率高) | 子问题可能重复计算(效率低) |
解决方式 | 迭代(需要记住子问题的解) | 递归法或者递推法 |
时间复杂度 | O(m*n)n是需要n步叠代计算局部最优解,每一步叠代需要计算m个子项 | ![]() |
空间复杂度 | 高(用空间换时间,提高效率) | 相对较低 |
特点 | ①把原问题都分解成一系列的子问题②求解每个问题只求解一次,并将结果保存在一个表中,以后用到时直接存取,不重复计算,节省计算时间 | ①问题的规模缩小到一定的程度就可以容易地解决;②最有子结构性。问题可以分解为若干个规模较小的相同问题;③利用该问题分解出的子问题的解可以合并为该问题的解;④该问题所分解出的各个子问题是相互独立的,即子问 题之间不包含公共的子子问题 |
适用范围 | 一类优化问题,可以分解成多个相关子问题,子问题的解被重复使用 | ①较大规模的复杂问题可以拆分成较小规模的简单问题②拆分的问题种类相同,可以类比解决 |
适用条件 | ①具有最优子结构的性质②具有重叠子问题 | ① 原问题与分解的小问题之间具有相同的模式 ② 原问题分解成子问题可以独立求解,子问题之间没有相关性,这一点是分治算法跟动态规划的明显区别。 ③ 具有分解终止条件,即当问题足够小小可以直接求解 |
有关分治算法的详细介绍和有关示例(归并排序,快速排序,二分搜索算法)传送门
有关动态规划算法的详细介绍与示例(背包问题)传送门
⛵小结
以上就是针对分治算法和动态规划算法之间区别的的详细介绍,可以使我们更加清楚的去了解这两种算法,以便在我们以后遇到问题的时候去使用相应的方法去解决问题。
如果这篇【文章】有帮助到你,希望可以点个赞👍,创作不易,如果有对【后端技术】、【算法设计与分析】【数据结构】【Linux操作系统】感兴趣的小可爱,也欢迎关注 【LNORA】,我们可以一起进步,每天进步一点点,我将会给你带来巨大的【收获与惊喜】💝💝💝!