算法第三章作业

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

数字三角形问题分析
1.1 最优子结构性质与递归方程式
问题定义:
设 triangle[i][j] 表示第 i 行第 j 列的数字,dp[i][j] 表示从顶点 (0,0) 到达位置 (i,j) 的最大路径和。
递归方程式:
dp[i][j] = triangle[i][j] + max(dp[i-1][j-1], dp[i-1][j])

边界条件:
当 i = 0, j = 0 时:dp[0][0] = triangle[0][0]
当 j = 0 时(每行第一个元素):dp[i][0] = triangle[i][0] + dp[i-1][0]
当 j = i 时(每行最后一个元素):dp[i][i] = triangle[i][i] + dp[i-1][i-1]

方程解释:
到达 (i,j) 的最大路径和等于当前位置的值加上从上方两个可能位置 (i-1,j-1) 和 (i-1,j) 中较大的那个路径和。

1.2 填表法分析
表的维度: 二维表格,大小为 n × n
填表范围:
行范围:i = 0 到 n-1
列范围:j = 0 到 i(三角形每行的列数等于行号+1)

填表顺序:
从上到下,从左到右。先填充第0行,然后第1行,依此类推直到第n-1行。

原问题的最优值:
位于最后一行中的最大值,即:
max_value = max(dp[n-1][j]),其中 j = 0 到 n-1
对于给定的输入样例,最优值30就是 dp[4][j] 中的最大值。

1.3 算法复杂度分析
时间复杂度: O(n²)
需要填充一个 n × n 的表格(实际填充约 n(n+1)/2 个元素)
每个元素的计算需要常数时间 O(1)

空间复杂度: O(n²)
需要存储 n × n 的dp表格
优化后可以降为 O(n),只存储当前行和前一行的数据

对动态规划算法的理解和体会
动态规划是一种通过将复杂问题分解为相互重叠的子问题来求解优化问题的方法。其核心思想包括:
最优子结构: 问题的最优解包含其子问题的最优解
重叠子问题: 在递归求解过程中,相同的子问题会被多次计算
记忆化存储: 通过表格存储已解决的子问题结果,避免重复计算
通过数字三角形这个经典问题,我深刻理解了动态规划"自底向上"的求解思想。与分治法相比,动态规划通过存储中间结果避免了重复计算;与贪心算法相比,动态规划会考虑所有可能的选择,从而保证得到全局最优解。

posted @ 2025-11-15 18:56  Chenz111  阅读(0)  评论(0)    收藏  举报