算法设计与分析第三章作业

Y2113e 2024-11-01 17:21:50

 题目《最低通行费》   动态规划方程

(1)状态表示:

  • f[i][j]表示从左上角走到坐标(i,j)位置的最小路径和。

(2)状态方程:

f[i][j] = min(f[i - 1][j], f[i][j - 1]) + a[i][j]
走到当前位置的最小路径和 = 从上方位置或从左方位置过来的较小路径 + 当前位置值

(3)边界条件:

f[i][0] = 0x3fffffff;f[0][j] = 0x3fffffff
不存在从第 0 行到达任意列和第0 列到达任意行的有效路径,所以将其初始化为一个极大值来表示这种无效状态。

f[1][1] = a[1][1];
起点位置的最小路径和就是该位置的值。

(4)时间、空间复杂度分析

  • 时间复杂度:代码中有三层循环,分别遍历矩阵的行和列,所以时间复杂度为O(n^2)。
  • 空间复杂度:使用了两个二维数组af来存储矩阵的值和状态,空间复杂度也是O(n^2)。

 

对动态规划法的体会和思考

  • 动态规划避免了重复计算,通过保存子问题的解,大大提高了计算效率。在这个问题中,利用数组f存储了到达每个位置的最小路径和,避免了对相同位置的多次计算。
  • 对于规模较大的问题,动态规划的优势更加明显。如果使用暴力搜索等方法,时间复杂度可能会呈指数增长,而动态规划可以将时间复杂度控制在多项式级别。
  • 状态方程则给出了子问题之间的关系,通过这种关系可以逐步推导出最终问题的解。这种清晰的思路有助于我们理解问题的本质和解决方法。
...全文
32 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

434

社区成员

发帖
与我相关
我的任务
社区描述
广东外语外贸大学信息科学与技术学院
算法 高校
社区管理员
  • brisksea
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧