File tree Expand file tree Collapse file tree 1 file changed +3
-3
lines changed
Contents/10.Dynamic-Programming/01.Dynamic-Programming-Basic Expand file tree Collapse file tree 1 file changed +3
-3
lines changed Original file line number Diff line number Diff line change @@ -97,7 +97,7 @@ class Solution:
97
97
98
98
也就是说,** 一旦某一个子问题的求解结果确定以后,就不会再被修改** 。
99
99
100
- 举个例子,下图是一个有向无环带权图,我们在求解从 $A$ 点到 $F$ 点的最短路径问题时,假设当前已知从 $A$ 点到 $D$ 点的最短路径($2 + 7 = 11 $)。那么无论之后的路径如何选择,都不会影响之前从 $A$ 点到 $D$ 点的最短路径长度。这就是「无后效性」。
100
+ 举个例子,下图是一个有向无环带权图,我们在求解从 $A$ 点到 $F$ 点的最短路径问题时,假设当前已知从 $A$ 点到 $D$ 点的最短路径($2 + 7 = 9 $)。那么无论之后的路径如何选择,都不会影响之前从 $A$ 点到 $D$ 点的最短路径长度。这就是「无后效性」。
101
101
102
102
而如果一个问题具有「后效性」,则可能需要先将其转化或者逆向求解来消除后效性,然后才可以使用动态规划算法。
103
103
@@ -381,8 +381,8 @@ class Solution:
381
381
382
382
#### 4.3.5 复杂度分析
383
383
384
- - ** 时间复杂度** :$O(m * n)$。初始条件赋值的时间复杂度为 $O(m + n)$,两重循环遍历的时间复杂度为 $O(m * n)$,所以总体时间复杂度为 $O(m * n)$。
385
- - ** 空间复杂度** :$O(m * n)$。用到了二维数组保存状态,所以总体空间复杂度为 $O(m * n)$。因为 $dp[ i] [ j ] $ 的状态只依赖于上方值 $dp[ i - 1] [ j ] $ 和左侧值 $dp[ i] [ j - 1 ] $,而我们在进行遍历时的顺序刚好是从上至下、从左到右。所以我们可以使用长度为 $m $ 的一维数组来保存状态,从而将空间复杂度优化到 $O(m )$。
384
+ - ** 时间复杂度** :$O(m \times n)$。初始条件赋值的时间复杂度为 $O(m + n)$,两重循环遍历的时间复杂度为 $O(m \times n)$,所以总体时间复杂度为 $O(m \times n)$。
385
+ - ** 空间复杂度** :$O(m \times n)$。用到了二维数组保存状态,所以总体空间复杂度为 $O(m \times n)$。因为 $dp[ i] [ j ] $ 的状态只依赖于上方值 $dp[ i - 1] [ j ] $ 和左侧值 $dp[ i] [ j - 1 ] $,而我们在进行遍历时的顺序刚好是从上至下、从左到右。所以我们可以使用长度为 $n $ 的一维数组来保存状态,从而将空间复杂度优化到 $O(n )$。
386
386
387
387
## 参考资料
388
388
You can’t perform that action at this time.
0 commit comments