动态规划算法与分治算法

本文探讨了动态规划和分治算法的区别,包括求解顺序、时间复杂度、子问题重叠性,以及它们在解决复杂问题中的应用策略。动态规划适用于最优子结构的问题,而分治适合子问题独立且规模可递减的情况。
摘要由CSDN通过智能技术生成

什么是动态规划算法?

我自己的理解是 一种自底向上的思维,求解一个复杂问题时,将复杂问题分解为不同阶段(不同子问题),先从已知的最简单的阶段(问题)开始,一步一步推导出最后的复杂情况,期间会用数组或者集合把中间结果存起来,避免重复计算。

什么是分治算法?

分治是一种自顶向下的思维,求解一个复杂问题时,将复杂问题分解成多个独立的子问题,子问题继续分解,直到子问题可以直接求解,然后将子问题的解一层一层组合成复杂问题的解。

相同点:都是将复杂问题简单化,分解成子问题 求解

不同点

1、动态规划要求最优子结构

简而言之,就是子问题有最优解,而父问题的最优解包含子问题的最优解;

2、求解顺序不同

分治一般是自顶向下递归求解,动态规划一般是自底向上,从简单问题慢慢迭代求解;

3、时间复杂度不同

分治算法:一般使用递归实现,依赖于问题规模的指数幂,通常情况下时间复杂度较高;

动态规划:保存中间数据,避免了大量的重复计算,时间复杂度通常相对较低,但空间复杂度高,以空间换时间;

4、子问题重叠性

动态规划:子问题之间存在重叠的部分,即不同的子问题可能会多次使用相同的中间结果;

分治算法:子问题相互独立,没有重叠的部分;

什么问题可以使用动态规划解决,什么问题可以使用分治解决?

先放一个取巧的方法,根据数据范围判断,因为动态规划 是一个递推的过程,因此如果数据范围是10^5 至10^6 的话,可以考虑是不是可以使用一维动态规划来解决;如果数据范围是10^2至10^3的话,可以考虑是不是可以使用二维动态规划来做;

如果复杂问题分解出的子问题相互之间是独立的,这时可以用分治算法,反之则适合动态规划

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值