434
社区成员
发帖
与我相关
我的任务
分享1.请写出作业“算法第三章3”中题目“7-4最低通行费”的动态规划方程
请按照如下格式书写动态规划方程:
(1)状态表示:用a[i][j]这个二维数组来表示从第i行第j列位置出来的最低通行费
(2)状态方程:①i==1:a[i][j]=a[i][j]+a[i][j-1]
②j==1:a[i][j]=a[i][j]+a[i-1][j]
③a[i][j]=a[i][j]+min(a[i][j-1],a[i-1][j]
(3)边界条件:①i==1:表示从第一行走,从左往右走,当前位置的通行费等于它左边位置 的通行费加上当前位置的通行费,即a[i][j]=a[i][j]+a[i][j-1]
②j==1:表示从第一列走,从上往下走,当前位置的通行费等于它上方位置的通行费加上当前位置的通行费,即a[i][j]=a[i][j]+a[i-1][j]
③其它情况下,a[i][j]=a[i][j]+min(a[i][j-1],a[i-1][j])
(4)时间、空间复杂度分析:
时间复杂度为O(n^2)
空间复杂度也为O(n^2)
2.结合本章的学习,总结你对动态规划法的体会和思考
动态规划法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,再结合这些子问题的解得到原问题的解;不同之处是分解所得到的子问题并不相互独立,而是互有重叠。
动态规划算法的两个基本要素是:(1)最优子结构性质 (2)重叠子问题性质
动态规划基本步骤:(1)找出最优解性质,并刻画其结构特征 (2)递归地定义最优值 (3)计算出最优值:方法①自底向上的求解方式——动态规划算法 方法②自顶向下的求解方式——备忘录算法 (4)根据计算最优值时得到的信息,构造最优解
矩阵连乘计算次序问题可以用动态规划法求解,穷举搜索法对此问题不是有效的算法,矩阵连乘计算次序问题的最优解包含着其子问题的最优解,这种性质就是最优子结构性质,该问题也具有重叠子问题性质。最长公共子序列问题和0-1背包问题也可以动态规划法求解。
以下还有一些我对动态规划法的体会和思考:动态规划法具有高效性:动态规划通过保存子问题的解,避免了重复计算,大大提高了算法的效率。对于一些复杂问题,传统方法可能会陷入指数级的计算复杂度,而动态规划能够将问题的求解时间降低到多项式级别。它还具有优化性:它通常能够找到问题的最优解。通过分析问题的最优子结构和重叠子问题性质,动态规划可以逐步构建出全局最优解,为实际问题中的决策提供最佳方案。我觉得运用动态规划法有一定的难度,对我来说问题分析难度很大,还有状态定义和转移方程,找到合适的状态定义和状态转移方程是动态规划的关键步骤,不同的问题可能需要不同的状态表示和转移方式,对我来说写出状态方程也有一定的难度。
我觉得动态规划法是一种挺强大的算法设计技术,虽然在应用过程中存在一些挑战,但通过深入理解问题性质、巧妙地定义状态和转移方程,并合理地进行空间和时间复杂度的权衡,应该能够充分发挥动态规划的优势,解决各种复杂的实际问题。