434
社区成员
发帖
与我相关
我的任务
分享1.动态规划方程
(1)状态表示
设 c[i][j] 表示从点 (i, j) 到达 (n, n) 的最低通行费。
(2)状态方程
c[i][j]=m[i][j]+max(c[i+1][j],c[i][j+1])
(3)边界条件
初始条件:c[n][n] =m[n][n]
最后一行:c[n][i] = m[n][i] + c[n][i+1]
最后一列:c[i][n] = m[i][n] + c[i+1][n]
(4)时间、空间复杂度分析
时间复杂度:
代码中有两个嵌套的 for 循环,分别遍历矩阵的每一个元素来计算 c[i][j] 的值。
因此,时间复杂度为 O(n^2)。
空间复杂度:
使用了一个二维数组 c 来存储通行费,还使用了一个二维数组 m 来存储输入矩阵。
因此,空间复杂度为 O(n^2)。
2.体会与思考:
(1)动态规划的核心在于将复杂问题分解为一系列相互依赖的子问题,并找到一种有效的状态表示方法。状态表示需要能够准确地反映问题的当前状况,并且能够通过子问题的解来构建出原问题的解。
(2)状态转移方程是动态规划的核心,它描述了如何从子问题的解推导出当前问题的解。状态转移方程通常基于问题的具体特征和约束条件来构建。
(3)边界条件是动态规划问题中必须考虑的重要因素。它们通常对应于问题中最简单或最基础的情况,并且作为递归或迭代计算的起点。
初始化状态是动态规划算法的重要步骤,它决定了算法开始时的状态表示。正确的初始化是确保算法正确性的关键。
(4)动态规划算法的时间复杂度通常取决于状态表示的大小和状态转移方程的复杂度。对于大多数问题,时间复杂度为O(n^d),其中n是问题的规模,d是状态空间的维度。