第三章作业
动态规划求解最低通行费问题实践报告
1.1 最优子结构、递归方程与边界条件
定义状态 dp[i][j] 为从起点走到第 i 行第 j 列位置的最低通行费用。
递归方程:dp[i][j]=a[i][j]+min(dp[i-1][j],dp[i][j-1]),代表当前位置费用加上两条来路中更小的通行费用。
边界条件:起点 dp[1][1]=a[1][1];第一行 dp[1][j]=dp[1][j-1]+a[1][j];第一列 dp[i][1]=dp[i-1][1]+a[i][1]。
1.2 填表维度、范围、顺序及最优解位置
本题使用二维 dp 数组作为填表结构,填表范围覆盖整个矩阵区域。算法先初始化第一行与第一列边界,再按照从上至下、从左至右的顺序逐格填表,保证求解顺序符合状态依赖关系。最终整个问题的最优解为表格右下角的存储数值。
1.3 算法时间复杂度与空间复杂度分析
算法需要遍历全部n2个方格,每个方格仅进行常数次运算,时间复杂度为O(n2)。基础填表方案需要开辟n行n列的二维数组存储状态,空间复杂度为O(n^2)。
动态规划算法的理解与体会
动态规划利用最优子结构与重叠子问题特性,以空间换时间,通过记录子问题最优结果避免暴力算法的大量重复计算,显著提升解题效率。动态规划解题流程严谨规范,核心在于准确设计状态、推导递推公式、设置合理边界条件,并严格遵循正确的填表顺序。通过本次最低通行费问题练习,我更加熟练掌握了自底向上的动态规划求解思路,深刻理解了状态之间的依赖关系。同时认识到动态规划适用于各类最优路径、最值选择问题,适用性广泛,是算法学习中十分重要的基础思想,为后续复杂算法问题求解打下了良好基础。
浙公网安备 33010602011771号