算法第三章作业
一、动态规划求解分析
1.1 递归方程式
状态定义:dp[i][j] 表示从顶部到第 i 层第 j 个元素的最大路径和(0≤i≤n-1,0≤j≤i)。
递归方程:
边界(j=0 或 j=i):dp[i][j] = dp[i-1][j'] + triangle[i][j](j' 为唯一可到达的上一层索引);
中间元素(0<j<i):dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j]。
边界条件:dp[0][0] = triangle[0][0]。
1.2 填表法细节
表维度:n×n 二维表(n 为三角形层数);
填表范围:行 1~n-1、列 0~i(第 i 层);
填表顺序:从上到下、逐层填充(依赖上一层结果);
最优值:第 n-1 层所有 dp[n-1][j] 的最大值。
1.3 复杂度分析
时间复杂度:O(n²),需遍历 n(n-1)/2 个元素,每个元素计算为 O(1);
空间复杂度:O(n²)(原始二维表),可优化为 O(n)(仅存当前层和上一层)。
二、动态规划算法理解与体会
动态规划核心是 “拆分问题、存储子问题最优解、避免重复计算”,核心依赖 “最优子结构” 和 “无后效性”。它不盲目枚举所有路径,而是通过状态转移积累最优结果,大幅提升效率。实际应用中,关键是找准状态定义和转移方程,填表顺序需贴合依赖关系,空间上常可通过压缩状态优化,是解决多阶段决策最优问题的高效方法。
浙公网安备 33010602011771号