算法第三章作业
1.分析“数字三角形”问题
1.1 递归方程式(最优子结构与边界条件)
状态定义:设dp[i][j]表示从第i行第j列的数字出发,到三角形底部的最大路径和。
递归方程式:由于每一步可沿左斜线或右斜线向下,因此dp[i][j] = triangle[i][j] + max(dp[i+1][j], dp[i+1][j+1])。
其中triangle[i][j]表示第i行第j列的数字。
边界条件:当i = n-1(假设行索引从0开始,n为总行数)时,dp[n-1][j] = triangle[n-1][j](最底层的数字到自身的路径和就是其本身)。
1.2 填表法的表维度、范围、顺序及最优值
表的维度:二维表格,维度为n × n(n是数字三角形的行数)。
填表范围:行范围是从第n-2行到第0行(从下往上填),列范围是每行的所有列(第i行有i+1个列,i从0开始)。
填表顺序:从下往上,从左到右。先计算最底层的dp 值(边界条件),再依次计算上一层的每个位置的dp值。
原问题的最优值:dp[0][0](从顶点出发到底部的最大路径和)。
1.3 时间与空间复杂度分析
时间复杂度:需要填充 n × n规模的表格,每个表格元素的计算时间是O(1),因此时间复杂度为O(n²)。
空间复杂度:若使用二维数组存储 dp表,空间复杂度为O(n²)。可优化为一维数组(滚动数组),空间复杂度降为 O(n)(因为计算第 i 行时仅依赖第 i+1行的结果)。
2.对动态规划算法的理解和体会
动态规划是一种通过将原问题分解为重叠子问题,并通过存储子问题的解来避免重复计算的算法思想。在“数字三角形”问题中,动态规划的核心价值体现在,相比暴力枚举所有路径(时间复杂度为 O(2ⁿ)),动态规划将时间复杂度优化到 O(n²),在n较大时(如n=100)效率提升极其显著。而且,它要求我们从状态定义、状态转移、边界条件三个维度拆解问题,这种结构化的分析方法也适用于最长公共子序列、背包问题等。

浙公网安备 33010602011771号