动态规划
动态规划算法的策略简单来说就是空间换时间。
一般我们需要开辟o(n^2)
空间复杂度的辅助数组,用于存储每一个子问题的最优解。
看过一些DP算法例子的同学来说,多数DP问题经常可以进行空间优化,把O(n^2) -> O(n)
。
问题
那么问题来了,空间优化有几种情况:
- 1、优化到
O(n * 2)
- 2、优化到
O(n)
,顺序遍历 - 3、优化到
O(n)
,逆序遍历
什么情况下用哪一种优化呢?
方案
以下方案是我个人的思考,可能有错误或缺漏,还请各位指出。
一、优化到O(n * 2)
此方案把本来n个一维数组优化到2个一维数组。
适用情况:
第i行的新值 依赖于 第i-1行的旧值、第i行前面的新值。
例子:最长公共子序列。
二、优化到O(n)
,顺序遍历
此方案把本来n个