算法第三章作业
1.实践报告
1.1
商人不能走回头路(不能向左或向上走),只能向右或向下移动。dp[i][j]=min(dp[i−1][j],dp[i][j−1])+cost[i][j],cost[i][j] 表示第 i 行第 j 列方格的通关费用,dp[i][j]表示从左上角走到当前网格位置(i,j)所需的最低通行费。dp[0][0] = cost[0][0]。
1.2
填表顺序是从上到下,从左向右。因为 dp[i][j] 的值依赖于其正上方 dp[i-1][j] 和正左方 dp[i][j-1] 的值,必须保证计算当前元素时,它上方和左方的元素已经计算完毕。原问题的最优值是右下角的元素(dp[N-1][N-1]).
1.3
算法的时间复杂度是O(n2),空间复杂度也是O(n2),因为额外创建了一个二维表来储存子问题的最优值问题。
2.对动态规划算法的理解与体会
动态规划算法与分治法有许多相似之处,都要划分子问题,分别求解子问题,合并子问题。但是动态规划求解子问题的过程中会发生求解的子问题答案重复的情况。这里就引出了填表的思想。表面上是在填表、写转移方程,实质上是在寻找问题中可复用的子结构,并用一种有序的方式把子问题的答案组合成原问题的答案。动态规划让我体会到:复杂问题不一定需要复杂枚举,关键是找到问题的层次结构和可复用子问题。它训练的是状态抽象能力、递推思维和边界意识。真正掌握动态规划算法,不是记住多少方程,而是能够从一个具体问题中提炼出状态、关系和顺序,并解释每一步为什么成立。

浙公网安备 33010602011771号