一、分析作业——单调递增最长子序列
1.1 根据最优子结构性质,列出递归方程:
设:a[n]保存用户输入的n个数,b[i]表示当前累计递增的数量,max表示当前最大值
递归方程: if(a[ i ] > a[ j ] && b[ i ] < b[ j ] + 1) {b[ i ] = b[ j ] + 1;}
if(max < b[ i ]) {max = b[ i ] ;}
1.2 给出填表法中表的维度、填表范围和填表顺序
①表的维度:一维
②填表范围:[1,n]
③填表顺序:从左到右(从小到大)
1.3分析该算法的时间和空间复杂度
(1)时间复杂度:遍历数组的所有值所需时间量级为n,再次遍历数组逐个比较以得到递增最长子序列的时间量级也为n,故算法复杂度为O(n^2);
(2)空间复杂度:由于数组所需的表以及所填的表均为一维的表,故空间复杂度为O(n)。
二、如何理解动态规划
(1)动态规划的四步法能够较好地分析动态规划问题
step1:找出最优解的性质,刻画其结构特征;
step2 :递归地定义最优值;
step3:自底向上方式计算出各子结构的最优值;
step4:构造最优解;
其中,什么叫做“自底向上”,我的理解是从构成原问题的子问题入手,找到子问题的相似之处,把他们用递归公式串联起来,再形成原问题的最优解。“底”即为基础,“上”即为越来越接近原问题。
(2)与分治法的区别
动态规划有效防止了子问题的重复计算,每个问题只计算一次,避免了重复计算子问题,利用填表来记录已经被解决的子问题的解,提高了算法效率。
三、编程结对情况
搭档:任宜炫
这次上机相对以往几次较为容易,因为我和搭档在动手编程之前,先分析问题,将递归方程写出,在编程过程中结合我们遇到的问题进行改进,最终比较顺利的完成了上机实验。
浙公网安备 33010602011771号