算法第三章作业
1. 单调递增最长子序列问题分析
1.1 根据最优子结构性质,列出递归方程式
定义一个数组dp,初始化为1,表明最小单调递增最长子序列为1。
递归,如果后面的数字比前面的大dp就加1,且dp是取前面最大的
递归表达式为dp[i] = max(dp[j] + 1, dp[i])
1.2 给出填表法中表的维度、填表范围和填表顺序
表的维度为一维
填表的范围为[0,n]
填表顺序为自左向右
1.3 分析该算法的时间和空间复杂度
算法的时间复杂度:O(n^2),
算法的空间复杂度:O(n),
2. 你对动态规划算法的理解
动态规划算法与分治法类似,其基本思想是将待求解问题分解成若干子问题,先求解子问题,再结合这些子问题的解得到原问题的解。与分治法不同的是,适用于动态规划法求解的问题经分解得到的子问题往往不是互相独立的,为了避免大量的重复计算,可以用一个表来记录所有已解决的子问题的答案。
动态规划算法适用于求解最优化问题,通常按照下面4个步骤设计:
(1)找出最优解的性质,并刻画其结构特征
(2)递归地定义最优值
(3)以自下而上的方式计算最优值
(4)根据计算最优值时得到的信息,构造最优解
3. 说明结对编程的情况
我的结伴编程伙伴是闵莞怡,上次实验课的编程题是最低通行费问题,在编程过程中只出现了一点小问题,比如数组的初始化不对,递归表达式直接用一个数组来计算,有点复杂,最后理清楚思路以后,编程很顺利。