第三次作业
1.1 递归方程式
最优子结构性质:问题的最优解包含其子问题的最优解。
递归方程式:设dp[i][j]表示到达三角形第i行第j列的数字所能获得的最大路径和。则有递归方程式:
[dp[i][j]=\text{triangle}[i][j]+\max(dp[i+1][j],dp[i+1][j+1])]
其中,triangle[i][j]是三角形第i行第j列的数字。
定义:
dp[i][j]:到达第i行第j列的最大路径和。
边界条件:
当i == n-1时(n是三角形的行数),dp[i][j] = triangle[i][j],因为已经到达三角形的底部,不需要再向下走。
1.2 填表法
表的维度:二维数组dp,其维度与三角形数组triangle相同。
填表范围:从三角形的倒数第二行开始向上填表,直到第一行。
填表顺序:从底部向上,从左到右。
原问题的最优值:dp[0][0],即到达三角形顶部(第一行第一列)的最大路径和。
1.3 时间和空间复杂度分析
时间复杂度:O(n^2),其中 n 是三角形的行数。这是因为我们需要计算三角形中每个位置的dp值,共有 n(n+1)/2 个位置,每次计算dp[i][j]需要 O(1)的时间。
空间复杂度:O(n^2),我们需要一个与三角形大小相同的二维数组来存储每个位置的最大路径和。
理解和体会
动态规划是一种解决复杂问题的方法,它将问题分解为更简单的子问题,并通过解决子问题来构建原问题的解。这种方法的关键是要识别出最优子结构性质和递归方程式,然后通过填表法来避免重复计算子问题,从而提高效率。
在数字三角形问题中,我们通过从底部向上计算每个位置的最大路径和,避免了重复计算到达每个位置的路径和,这是动态规划的核心思想。通过这种方法,我们可以在多项式时间内解决这个问题,而如果使用贪心或暴力搜索算法,可能会遇到效率低下的问题。
此外,动态规划还教会我们如何通过空间换时间的方式来优化算法。在数字三角形问题中,我们使用了一个额外的二维数组来存储中间结果,虽然增加了空间复杂度,但大大减少了计算时间。这种权衡在解决实际问题时是非常常见的。

浙公网安备 33010602011771号