算法第三章作业

动态规划求解数字三角形问题 实践报告

1. 动态规划求解步骤分析

1.1 最优子结构与递归方程式

问题定义:
数字三角形中从顶部到底部的路径,使路径上数字之和最大。每一步只能走到左下方或右下方相邻的数字。

递归方程式:
dp[i][j] = triangle[i][j] + max(dp[i+1][j], dp[i+1][j+1])

方程式说明:
dp[i][j] 表示从位置 (i,j) 到底部的最大路径和
triangle[i][j] 是当前位置的数字
max(dp[i+1][j], dp[i+1][j+1]) 表示选择左下方或右下方中较大的路径

边界条件:

dp[n-1][j] = triangle[n-1][j] (最后一行)

1.2 填表法分析

表的维度:二维表格 dp[n][n],其中 n 是三角形的行数

填表范围:
行范围:从 n-1 到 0(自底向上)
列范围:第 i 行从 0 到 i

填表顺序:自底向上,从最后一行开始逐行向上计算

原问题的最优值:dp[0][0](从顶部到底部的最大路径和)

1.3 算法复杂度分析

时间复杂度:O(n²)
需要填充 n(n+1)/2 个表格元素
每个元素的计算时间为 O(1)

空间复杂度:O(n²)
需要 n×n 的二维数组存储中间结果
可优化为 O(n) 使用滚动数组

2. 对动态规划算法的理解和体会

通过数字三角形问题的求解,我对动态规划有了更深入的理解:

1. 最优子结构是关键特征。问题的最优解包含子问题的最优解,这使得我们可以通过组合子问题的解来构造原问题的解。

2. 重叠子问题让记忆化变得有意义。在递归求解过程中,很多子问题被重复计算,动态规划通过表格存储避免了重复计算。

3. 自底向上的填表方法通常比自顶向下的记忆化搜索更高效,因为它避免了递归调用的开销。

4. 状态定义很重要。合理定义状态和状态转移方程是解决问题的核心。

5. 动态规划不仅是一种算法,更是一种思维方式。它教会我将复杂问题分解,通过解决小问题来构建大问题的解。

数字三角形问题很好地体现了动态规划的基本思想,是理解这一重要算法范式的经典例题。

posted @ 2025-11-18 18:31  冯智宁  阅读(1)  评论(0)    收藏  举报