第三次作业

实践报告:动态规划法求解“数字三角形”问题分析
一、动态规划法求解“数字三角形”问题步骤分析

问题描述:数字三角形由n行数字组成,第i行有i个数字。从顶部出发,每次只能向下或向右下移动,路径上所有数字之和为路径和,求最大路径和。
1.1 递归方程式(基于最优子结构)
状态定义:设dp[i][j]表示从第i行第j列(行列均从1开始计数)的数字出发,到达三角形底部的最大路径和。
-最优子结构性质:从(i,j)出发,下一步只能到(i+1,j)(i+1,j+1),因此dp[i][j]取决于这两个位置的最大路径和,即:
dp[i][j] = triangle[i][j] + max(dp[i+1][j], dp[i+1][j+1])
边界条件:当到达最后一行(i = n)时,路径终止,最大路径和即为自身数值,即:
dp[n][j] = triangle[n][j](其中j的范围为1 ≤ j ≤ n)。 1.2 填表法细节 表的维度:二维表dp,维度为n×n(n为三角形行数,第i行有i个有效元素)。 填表范围:第i行的列索引j范围为1 ≤ j ≤ i(仅填充有效位置)。 填表顺序:采用自底向上填表。从最后一行(i = n)开始,依次向上填充第n-1行、第n-2行……直到第1行。原因是计算dp[i][j]需依赖下方两行的dp[i+1][j]dp[i+1][j+1],自底向上可确保依赖项已提前计算。 原问题的最优值:三角形顶部元素(1,1)对应的dp[1][1],即从顶部出发的最大路径和。 1.3 时间和空间复杂度分析 时间复杂度:需填充的表格元素总数为1 + 2 + ... + n = n(n+1)/2,每个元素的计算仅需常数时间(取最大值和加法),因此时间复杂度为O(n²)。 空间复杂度:若使用二维表dp`存储所有状态,空间复杂度为O(n²)。优化后可仅用一维数组(滚动数组)存储当前行的下一行状态,空间复杂度可降至O(n)。
二、对动态规划算法的理解和体会

  1. 核心思想:动态规划(DP)通过将原问题分解为重叠子问题,利用子问题的最优解(最优子结构)推导出原问题的最优解,避免了递归法中重复计算子问题的弊端(通过存储中间结果——“备忘录”或“DP表”实现)。
  2. 适用场景:问题需满足两个关键条件:一是最优子结构(原问题的最优解包含子问题的最优解);二是子问题重叠(多个子问题重复出现,可通过存储避免重复计算)。
  3. 实现关键:
    定义清晰的状态(如dp[i][j]的含义)是核心,状态需准确描述子问题。
    推导递归方程(状态转移方程)需基于最优子结构,明确子问题间的依赖关系。
    确定填表顺序(自底向上或自顶向下+备忘录)需根据依赖关系判断,确保计算时依赖的子问题已解决。
  4. 优势与局限:动态规划能高效解决具有重叠子问题的优化问题,时间复杂度通常远低于暴力递归;但设计状态和转移方程较抽象,需对问题结构有深入理解,且空间复杂度可能较高(可通过优化存储缓解)。
    动态规划的本质是“用空间换时间”,其核心在于“发现重复、记录结果、复用结果”,是解决优化问题的强大工具。
posted @ 2025-11-18 19:14  Wu158  阅读(3)  评论(0)    收藏  举报