434
社区成员
发帖
与我相关
我的任务
分享1. 请写出作业“算法第三章3”中题目“7-4 最低通行费”的动态规划方程
( 1 )状态表示:使用一个二维数组dp [ i ] [ j ]来表示从左上角( 0,0 )到达网格中( i,j )位置的最小费用。
( 2 )状态方程:易知每次只需往下或往右走通行费最少,故易得dp [ i ][ j ] = min ( dp [ i-1 ] [ j ] , dp [ i ] [ j-1 ] ) + cost [ i ] [ j ] ,其中 cost [ i ] [ j ] 是[ i , j ]位置的费用。
( 3 )边界条件:起点dp [ 0 ] [ 0 ]的费用为 cost[ 0 ] [ 0 ];
第一行和第一列需要根据前一个位置的累计通行费加此处通行费来初始化,比如第一行: dp [ 0 ][ j ] = dp [ 0 ] [ j-1 ] + cost [ 0 ] [ j ] ,j>=1;
其余位置根据状态方程来填充。
( 4 )时间、空间复杂度分析:时间复杂度:由于每个网格点都需要计算一次,且每个点需要从其上方、左方获取值,所以时间复杂度为O ( N ^ 2 )
空间复杂度:需要一个NxN的二维数组来存储到达每个点的最小费用,所以空间复杂度为O ( N ^ 2 )。
2. 结合本章的学习,总结你对动态规划法的体会和思考
动态规划问题一般有最优子结构,这让我们可以通过把整个问题分解成多个子问题、解决子问题、找到子问题的最优解,得到整个问题的最优解。