第三章作业
1.1 状态定义:设 dp[i][j] 表示从数字三角形顶部(第 0 行第 0 列)到第 i 行第 j 列的路径最大数字和(行、列均从 0 开始计数)。
递推公式:
1,当 j = 0(当前列是第 i 行的第一列):只能从上方(第 i-1 行第 0 列)向下移动,故 dp[i][j] = dp[i-1][0] + triangle[i][j]。
2,当 j = i(当前列是第 i 行的最后一列):只能从左上方(第 i-1 行第 j-1 列)向下移动,故 dp[i][j] = dp[i-1][j-1] + triangle[i][j]。
3,当 0 < j < i(当前列是第 i 行的中间列):可从上方或左上方移动,取两者最大值,故 dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]) + triangle[i][j]。
边界条件:顶部元素无前置路径,dp[0][0] = triangle[0][0](triangle[0][0] 是三角形顶部数字)。
1.2 填表法相关说明
表的维度:采用二维表格 dp,维度为 n×n(n 是数字三角形的行数)。因第 i 行最多有 i+1 个元素,表格右下角部分(j > i)无需使用,不影响结果。
填表范围:行范围从 1 到 n-1(第 0 行已由边界条件初始化),列范围从 0 到当前行的最大列索引 i。
填表顺序:按行从上到下依次填充。先填第 1 行,再填第 2 行,直至第 n-1 行。每行内按列从左到右填充,确保计算 dp[i][j] 时,其依赖的 dp[i-1][j] 和 dp[i-1][j-1] 已完成计算。
原问题最优值:第 n-1 行(最后一行)所有 dp[n-1][j](j 从 0 到 n-1)中的最大值,即从顶部到最底部所有路径的最大和。
1.3 算法时间与空间复杂度
时间复杂度:O (n²)。需填充 n 行表格,第 i 行有 i+1 个元素,总操作次数为 1+2+3+...+n = n(n+1)/2,渐进时间复杂度为 O (n²)。
空间复杂度:O (n²)。二维表格 dp 占用 n×n 个存储单元,用于存储所有子问题的解。可优化为 O (n)(仅用一维数组存储当前行结果),但基础实现的空间复杂度为 O (n²)。
2,理解和体会
动态规划算法是一种将整个问题拆解成多个环环相扣的子问题,然后通过不断的解答出子问题最后得到最终答案的算法,这种思路能够有效的减少程序的时间复杂度,更快的得出结论。

浙公网安备 33010602011771号